Соедините два отдельных проекта через сельдерей - PullRequest
0 голосов
/ 11 января 2019

У меня есть проект "A" (Django), в котором я хочу создавать сообщения для отправки брокеру Celery, например Redis .

В другом проекте "B" (обычный python на той же машине) Я хочу запустить работника сервера Celery для наблюдения за сообщениями в брокере и выполнения задач. Задачи определены в B.

Когда задачи завершаются, они сохраняют результаты в redis (также используется как backend-результат).

Когда ответы будут готовы, я хочу, чтобы Джанго был в курсе.

Возможно ли это?
Моя главная проблема заключается в том, что A не должен импортировать задачи из B, поэтому я должен использовать что-то вроде send_task('task_name').

На практике я должен создать 2 отдельных экземпляра сельдерея, но запустить только серверный работник?

  • экземпляр 1 только отправляет сообщения и читает результат
  • экземпляр 2 регистрирует задачи, которые будут выполнены. Задачи в конечном итоге отправляют результат в бэкэнд

Эта архитектура верна или я что-то упустил?

1 Ответ

0 голосов
/ 11 января 2019
  1. Возможно ли это?

    Возможно все, о чем вы просите, кроме:

    Когда ответы будут готовы, я хочу, чтобы Джанго был в курсе.

    Ответы сельдерея хранятся в Redis, а Django не будет быть отдельно уведомленным. Вы должны опрашивать результат используя AsyncResult, чтобы выяснить, выполнена ли задача, и каков был его результат.

  2. На практике вы можете запустить столько сельдерея, сколько захотите. Цель сельдерея состоит в том, чтобы позволить вам распределить вашу рабочую нагрузку через столько серверов и процессов, сколько вы хотите. Для тебя архитектура, да, вам нужно запустить (как минимум) один сельдерей работник.

    В вашем продюсере (django) вы устанавливаете свою связь с Брокер сельдерея, используя следующий фрагмент:

    from celery.app import Celery
    app = Celery(broker_url='redis://....')
    app.send_task(...)
    

    У вашего потребителя (сельдерея) определите экземпляр Celery в соответствии с рекомендациями. в документации по сельдерею.

...