所以我在具有集群rabbitmq后端的多台服务器上运行celery。最近,我对 celery 所做的任何事情都开始无限期地挂起,检查rabbitmq 的日志为我提供了这个模糊的错误消息:
=ERROR REPORT==== 20-Mar-2013::23:52:25 ===
connection <0.15823.3>, channel 1 - soft error:
{amqp_error,not_found,
"no binding i-69995906 between exchange 'i-69995906' in vhost 'celery' and queue 'i-69995906' in vhost 'celery'",
'queue.bind'}
Run Code Online (Sandbox Code Playgroud)
运行 rabbitmqctl list_bindings 给了我这个:
# rabbitmqctl list_bindings -p celery
Listing bindings ...
exchange celery queue celery []
celery exchange celery queue celery []
...done.
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能摆脱错误?我已经重新启动了Rabbitmq,重新安装了Rabbitmq,并删除并恢复了集群。我猜我需要恢复先前存在的绑定,但我不知道如何从 rabbitmqctl 或 celery 恢复。如果这不起作用,我的芹菜任务根本不起作用。
谢谢你的提问。我最终到达了完全相同的地方。
我可以通过删除虚拟主机并重新创建它来纠正此问题
rabbitmqctl delete_vhost celery
rabbitmqctl add_vhost celery
rabbitmqctl set_permissions -p celery <user> ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了同样的问题,无需关闭集群或重置虚拟主机就可以修复它。
我有一个队列,其中绑定了 3 个路由键。我不得不在 1 个节点关闭时删除队列,此后,当我尝试在新创建的同名队列中再次注册路由密钥时,总是出现“vhost 中的交换与队列之间没有绑定”错误。
原始队列被创建为“持久”,解决方案是:
由于我想要一个持久的队列,然后我再次删除了该队列,创建了一个具有相同名称的新“持久”队列,然后绑定路由键工作正常。
也许通过创建一个具有不同“持久性”类型的新队列,确实重置了仍然保留在某处的旧绑定。
| 归档时间: |
|
| 查看次数: |
5291 次 |
| 最近记录: |