繁体   English   中英

将消息发送到RabbitMq(docker)时出现问题

[英]Problems sending messages to RabbitMq (docker)

我有三个Docker容器:

  • rabbitmq(启用管理插件)
  • 消费者(使用pika的多线程python应用程序)
  • 生产者(使用pika的多线程python应用程序)

使用者和生产者都能够连接到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)

其他容器的日志为空

编辑2

这是我运行rabbitmq容器的方式:

docker run -d -p 5672:5672 -p 55673:15672 --hostname my-rabbit --name rabbitmq rabbitmq:3.6.1-management

编辑3

将容器连接到自定义网桥时,效果相同:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM