首页 > 解决方案 > 配置 Django/Celery 将任务发送到不同的代理

问题描述

该系统正在运行一个 Django 服务器 (1.11.5),其中 Celery (4.0.0) 和 RabbitMQ 作为代理。

有必要将一些任务发送到远程服务器以在那里进行处理。这个新服务器将安装自己的 RabbitMQ 以将其用作代理。问题出现在运行 Django 的服务器上,我们需要选择哪些任务继续在本地机器上运行,哪些任务被发送到新服务器。

由于某些架构原因,无法使用队列解决此问题,因此必须将任务发送到新代理。

是否可以在 Django 中创建两个不同的 Celery 应用程序(每个都指向不同的代理),每个应用程序都有自己的任务?怎么做到呢?

标签: pythondjangorabbitmqcelery

解决方案


您可以创建两个 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 工作节点时:

celery --app=PACKAGE.celery_app:app worker

推荐阅读