python – Celery任务被发送到多个队列
发布时间:2020-05-23 04:51:52 所属栏目:Python 来源:互联网
导读:我注意到芹菜已经将任务发送到多个队列,两个队列中的工作人员一直在执行任务. 我的队列定义是: CELERY_QUEUES = ( Queue(default, Exchange(default), routing_key=default), Queue(client1, Exchange(client1), routing_key=client1),
|
我注意到芹菜已经将任务发送到多个队列,两个队列中的工作人员一直在执行任务. 我的队列定义是: CELERY_QUEUES = (
Queue('default',Exchange('default'),routing_key='default'),Queue('client1',Exchange('client1'),routing_key='client1'),Queue('images',Exchange('media'),routing_key='media.images'),)
在停止所有工人之后,我跑了: >>> tasks.ping.apply_async(queue='default') 我可以看到任务出现在default和client1队列中: $redis-cli -c llen default (integer) 1 $redis-cli -c llen client1 (integer) 1 这仅适用于默认队列.直接将它发送到client1队列只会将其添加到那里: >>> tasks.ping.apply_async(queue='client1') $redis-cli -c llen default (integer) 1 $redis-cli -c llen client1 (integer) 2 图像队列永远不会错误地接收任务. 这是Celery 3.1.15与Redis经纪人. 解决方法好的!看起来问题是Kombu的Redis经纪人没有清除旧的交换路由密钥.最初我配置了队列: CELERY_QUEUES = (
Queue('default',)
后来改为将它们用于client1的单独交换和路由密钥. 但由于某种原因,Kombu没有清除旧的绑定,所以我留下: redis> smembers _kombu.binding.default 1) "defaultx06x16x06x16client1" 2) "default.client1x06x16x06x16client1" 3) "defaultx06x16x06x16default" 因此,发送到默认值的任务将被路由到default和client1队列. 解决方法是删除不正确的绑定: redis> srem _kombu.binding.default "defaultx06x16x06x16client1" redis> srem _kombu.binding.default "default.client1x06x16x06x16client1" (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
