Настройте Django / Celery для отправки задач другому брокеру - PullRequest
2 голосов
/ 05 марта 2019

В системе работает сервер Django (1.11.5) с Celery (4.0.0) и RabbitMQ в качестве брокера.

Необходимо отправить некоторые задачи на удаленный сервер для обработки там. На этом новом сервере будет установлен собственный RabbitMQ, чтобы использовать его в качестве брокера. Проблема возникает, когда на сервере, на котором работает Django, нам нужно выбрать, какие задачи продолжают выполняться на локальном компьютере, а какие отправляются на новый сервер.

Из-за некоторых архитектурных причин это невозможно решить с помощью очередей, задачи должны быть отправлены новому брокеру.

Можно ли создать два разных приложения Celery в Django (каждое указывает на своего брокера), каждое из которых выполняет свои задачи? Как это можно сделать?

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете создать два приложения celery и переименовать celery.py в celery_app.py, чтобы избежать автоматического импорта.

from celery import Celery

app1 = Celery('hello', broker='amqp://guest@localhost//')

@app1.task
def hello1():
    return 'hello world from local'

и

from celery import Celery

app2 = Celery('hello', broker='amqp://guest@remote//')

@app2.task
def hello2():
    return 'hello world from remote'

и для общей задачи:

from celery import shared_task


@shared_task
def add(x, y):
    return x + y

Когда вы запускаете свой рабочий узел сельдерея:

celery --app=PACKAGE.celery_app:app worker
...