我正在用 Celery 替换一些自制代码,但很难复制当前的行为。我期望的行为如下:
tasks创建新用户时,应使用路由密钥将消息发布到交换器user.created。send_user_activate_email和check_spam。我尝试通过定义user_created带有参数的任务以及和 的ignore_result=True任务来实现此目的。send_user_activate_emailcheck_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', …Run Code Online (Sandbox Code Playgroud)