首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜任务被发送到多个队列

芹菜任务被发送到多个队列
EN

Stack Overflow用户
提问于 2015-10-28 19:45:25
回答 1查看 780关注 0票数 6

我注意到芹菜一直在向多个队列发送任务,两个队列上的工作人员都在执行这些任务。

我的队列定义是:

代码语言:javascript
复制
CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'),
    Queue('client1', Exchange('client1'), routing_key='client1'),
    Queue('images', Exchange('media'), routing_key='media.images'),
)

当我阻止了我所有的工人之后,我跑:

代码语言:javascript
复制
>>> tasks.ping.apply_async(queue='default')

我可以看到任务同时出现在defaultclient1队列中:

代码语言:javascript
复制
$ redis-cli -c llen default
(integer) 1
$ redis-cli -c llen client1
(integer) 1

这只适用于default队列。直接将其发送到client1队列只会将其添加到那里:

代码语言:javascript
复制
>>> tasks.ping.apply_async(queue='client1')
$ redis-cli -c llen default
(integer) 1
$ redis-cli -c llen client1
(integer) 2

images队列从不会错误地接收任务。

这是雷迪斯经纪人的3.1.15芹菜。

EN

回答 1

Stack Overflow用户

发布于 2015-10-28 20:04:31

好吧!看起来问题是Kombu的Redis经纪人没有清除旧的交换+路由密钥。

最初,我配置了队列:

代码语言:javascript
复制
CELERY_QUEUES = (
    Queue('default', Exchange('default'), routing_key='default'),
    Queue('client1', Exchange('default'), routing_key='default'),
)

之后,将它们更改为为client1使用单独的交换和路由密钥。

但由于某种原因,Kombu没有清除旧的绑定,所以我留下了:

代码语言:javascript
复制
redis> smembers _kombu.binding.default
1) "default\x06\x16\x06\x16client1"
2) "default.client1\x06\x16\x06\x16client1"
3) "default\x06\x16\x06\x16default"

因此,发送到default的任务被路由到defaultclient1队列。

解决方法是删除不正确的绑定:

代码语言:javascript
复制
redis> srem _kombu.binding.default "default\x06\x16\x06\x16client1"
redis> srem _kombu.binding.default "default.client1\x06\x16\x06\x16client1"
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33400254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档