![](/img/trans.png)
[英]Sending RabbitMq messages between Docker containers using docker-compose
[英]Problems sending messages to RabbitMq (docker)
我有三个Docker容器:
使用者和生产者都能够连接到rabbitmq队列,但是从产生者发送的消息永远不会到达使用者。 实际上,它们甚至在rabbitmq实例上都没有看到(我已经通过管理界面验证了这一点)
我尝试了许多不同的组合来连接到rabbitmq docker实例: 0.0.0.0
网络, 172.17.xx
网络,...目前,我正在使用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 ...
主机可以按名称(使用docker守护程序提供的DNS)相互ping通,因此我可以使用主机名连接到RabbitMq服务器。
连接已建立, 但消息未传递 。
非常奇怪,因为ping数据包可以到达另一个容器。
我的代码有一个错误:在生产者中错误地设置了routing_key,这就是为什么消息未传递到正确的队列的原因。
我完全感到困惑,因为在使用准系统rabbitmq(没有docker)时此错误没有出现
如果路由密钥不正确,则RMQ不会出现错误,为防止这种情况,我们可以在发布消息之前使用queuedeclarePassive。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.