【发布时间】:2016-07-20 22:19:06
【问题描述】:
我正在用 Celery 替换一些本地代码,但很难复制当前的行为。我想要的行为如下:
- 创建新用户时,应使用
user.created路由键将消息发布到tasks交换。 - 此消息应触发两个 Celery 任务,即
send_user_activate_email和check_spam。
我尝试通过使用ignore_result=True 参数定义user_created 任务以及send_user_activate_email 和check_spam 的任务来实现这一点。
在我的配置中,我添加了以下路由和队列定义。当消息传递到user_created 队列时,它不会传递到其他两个队列。
理想情况下,消息仅传递到send_user_activate_email 和check_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',
'exchange': 'tasks',
'exchange_type': 'topic',
},
'check_spam': {
'queue': 'user_created',
'routing_key': 'user.created',
'exchange': 'tasks',
'exchange_type': 'topic',
},
}
【问题讨论】:
标签: python rabbitmq celery message-queue messaging