相关疑难解决方法(0)

使用主题交换运行多个 Celery 任务

我正在用 Celery 替换一些自制代码,但很难复制当前的行为。我期望的行为如下:

  • tasks创建新用户时,应使用路由密钥将消息发布到交换器user.created
  • 此消息应触发两个 Celery 任务,即send_user_activate_emailcheck_spam

我尝试通过定义user_created带有参数的任务以及和 的ignore_result=True任务来实现此目的。send_user_activate_emailcheck_spam

在我的配置中,我添加了以下路由和队列定义。当消息传递到user_created队列时,它不会传递到其他两个队列。

理想情况下,消息仅传递到send_user_activate_emailcheck_spam队列。当使用 vanilla RabbitMQ 时,消息被发布到交换器,队列可以绑定到交换器,但 Celery 似乎直接将消息传递到队列。

我将如何在 Celery 中实现上述行为?

CELERY_QUEUES = {
    'user_created': {'binding_key':'user.created', 'exchange': 'tasks', 'exchange_type': 'topic'},
    'send_user_activate_email': {'binding_key':'user.created', 'exchange': 'tasks', 'exchange_type': 'topic'},
    'check_spam': {'binding_key':'user.created', 'exchange': 'tasks', 'exchange_type': 'topic'},
}

CELERY_ROUTES = {
    'user_created': {
        'queue': 'user_created',
        'routing_key': 'user.created',
        'exchange': 'tasks',
        'exchange_type': 'topic',
    },
    'send_user_activate_email': {
        'queue': 'user_created',
        'routing_key': 'user.created', …
Run Code Online (Sandbox Code Playgroud)

python messaging message-queue rabbitmq celery

5
推荐指数
1
解决办法
3529
查看次数

标签 统计

celery ×1

message-queue ×1

messaging ×1

python ×1

rabbitmq ×1