RabbitMQ 消费者停止接收消息
我在使用RabbitMQ的时候遇到了一个严重的问题。接收到一定数量的消息后,消费者就停止接收消息了。虽然它们仍然保持连接,但就是不再接收消息。我查找过其他关于这个问题的帖子,但没有找到有效的解决办法。
这是我使用的连接封装器:http://pastebin.com/XVY3HNGq。我用的是stormed-amqp,这是一个用于Python的异步AMQP库。
我尝试过在不确认消息的情况下消费消息,也尝试过在确认消息的情况下设置预取计数为100(这是针对这种问题的几个回复中提到的)。
当我执行“rabbitmqctl list_queues name messages_ready messages_unacknowledged”时,我发现有很多准备好的消息,还有在确认消息时未确认的消息的“预取计数”(100)。
我真的不知道发生了什么!谢谢大家的回答。
4 个回答
看代码的时候,我没有看到有什么明显的问题。把no-ack设置为True,并把预取数量设置为0应该是没问题的。你确定你的应用没有因为某个异常崩溃吗?它卡住的时候有没有什么特别的情况?
你也可以试着在RabbitMQ讨论的邮件列表上问问。开发者们通常会回答所有的问题,而且他们中有好几位对Python的AMQP客户端很熟悉。
我遇到了类似的问题(不过是关于Java消费者的),后来发现原因是rabbitmq服务器的文件描述符用完了(在Ubuntu系统中,默认是1024个)。
你可以尝试在运行rabbitmq服务器的机器上,增加打开文件的限制,特别是对于运行rabbitmq进程的用户。关于如何增加这些限制的详细方法,可以在这里找到:http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/
祝好
在网上搜索这个问题的时候,我发现了一个谷歌讨论,听起来跟你的问题很像。
https://groups.google.com/forum/#!topic/rabbitmq-discuss/DyJvFDnaVJ4