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

时间:2016-05-11 13:21:00

标签: python docker rabbitmq pika

我有三个泊坞容器:

  • rabbitmq(已启用管理插件)
  • 使用者(使用鼠兔的多线程python应用程序)
  • producer(使用pika的多线程python应用程序)

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

其他容器有一个空日志

EDIT2

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

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

EDIT3

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

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数据包到达另一个容器就好了。

2 个答案:

答案 0 :(得分:0)

我的代码有一个错误:在生产者中错误地设置了routing_key,这就是为什么消息没有被传递到正确的队列。

我完全感到困惑,因为这个bug在使用准系统rabbitmq(没有docker)时没有浮出水面

答案 1 :(得分:0)

如果路由密钥不正确,则RMQ没有错误,为了防止这种情况,我们可以在发布消息之前使用queuedeclarePassive。