我有三个泊坞容器:
消费者和生产者都能够连接到rabbitmq队列,但是从生产者发送的消息永远不会到达消费者。实际上,他们甚至没有在rabbitmq实例上看到过(我已经通过管理界面验证了这一点)
我尝试了很多不同的组合来连接到rabbitmq docker实例:0.0.0.0
网络,172.17.x.x
网络,...目前我正在使用amqp://guest:guest@172.17.0.2:5672
,这是有效的(我我能够打开一个连接,但不允许发送消息。
从主机我必须使用http://0.0.0.0:55673
连接到管理界面(55673
作为映射管理端口)
没有docker的相同配置工作正常:rabbitmq作为主机服务(甚至在云中)运行,而我的消费者/生产者作为普通进程运行。连接正常,并传递消息。
为什么连接正常打开的原因是什么,但是在使用docker时没有传递消息?
我可以进行哪些测试来进一步缩小问题范围?
rabbitmq使用者在日志中显示以下内容:
=INFO REPORT==== 11-May-2016::14:25:54 ===
accepting AMQP connection <0.687.0> (172.17.0.3:53576 -> 172.17.0.2:5672)
=INFO REPORT==== 11-May-2016::14:26:06 ===
accepting AMQP connection <0.825.0> (172.17.0.4:48607 -> 172.17.0.2:5672)
其他容器有一个空日志
这就是我运行rabbitmq容器的方式:
docker run -d -p 5672:5672 -p 55673:15672 --hostname my-rabbit --name rabbitmq rabbitmq:3.6.1-management
将容器连接到自定义网桥时效果相同:
docker network create -d bridge mynet
docker run --net mynet --name rabbitmq ...
docker run --net mynet --name consumer ...
docker run --net mynet --name producer ...
主机可以通过名称相互ping通(使用docker守护程序提供的DNS),因此我可以使用主机名连接到RabbitMq服务器。
建立连接但邮件未送达。
很奇怪,因为ping数据包到达另一个容器就好了。
答案 0 :(得分:0)
我的代码有一个错误:在生产者中错误地设置了routing_key,这就是为什么消息没有被传递到正确的队列。
我完全感到困惑,因为这个bug在使用准系统rabbitmq(没有docker)时没有浮出水面
答案 1 :(得分:0)
如果路由密钥不正确,则RMQ没有错误,为了防止这种情况,我们可以在发布消息之前使用queuedeclarePassive。