【发布时间】:2010-11-23 15:12:07
【问题描述】:
我正在尝试RabbitMQ 与this python 绑定。
我注意到的一件事是,如果我不干净地杀死了一个消费者(模拟一个崩溃的程序),服务器会认为这个消费者仍然存在很长时间。这样做的结果是所有其他消息都将被忽略。
例如,如果您杀死消费者 1 次并重新连接,则 1/2 消息将被忽略。如果你杀死另一个消费者,那么 2/3 的消息将被忽略。如果您杀死 3rd,则 3/4 消息将被忽略,依此类推。
我尝试打开确认,但似乎没有帮助。我找到的唯一解决方案是手动停止服务器并重置它。
有没有更好的办法?
如何重现此场景
运行rabbitmq。
取消归档this library。
下载消费者和发布者here。 运行 amqp_consumer.py 两次。运行 amqp_publisher.py,输入一些数据并观察它是否按预期工作。消息以循环方式接收。
使用 kill -9 或任务管理器终止其中一个消费者进程。
现在,当您发布消息时,50% 的消息将丢失。
【问题讨论】:
-
我无法重现这个。你用的是什么版本的linux
-
好问题——如果在防火墙或 IP 负载平衡设备后面运行会在 N 秒后丢弃空闲套接字,这是一个关键问题,因为 RabbitMQ 和客户端都不会被告知套接字已经消失直到他们尝试使用它。
-
我确实对 RabbitMQ 3.2.1 和 puka 有完全相同的问题。似乎仍然没有好的解决方案。
标签: python message-queue rabbitmq amqp