当连接和通道仍处于打开状态时,消费者不再收到来自RabbitMQ代理的消息

时间:2016-01-29 05:53:25

标签: multithreading rabbitmq producer-consumer bunny cloudamqp

我在其他帖子上看到过类似的问题,但没有一个得到确凿的答案。

我将围绕4个消费者(使用Bunny客户端gem用Ruby编写)来订阅相同的队列并处理消息,所有工作正常,直到消耗大约20,000-40,000个消息。然后消费者只是停止接收消息。连接/频道保持打开状态,服务器仍然识别消费者,但他们只是没有收到消息。

我认为这不是类似主题中提出的预取问题。我已经在各个级别设置了预取,但它并没有解决问题。问题不是单个消费者在其他消息之前获取所有消息 - 而是所有消费者都被停止。

我使用托管的RabbitMQ服务CloudAMQP,所以我认为它可能是一个性能问题,但发布消息仍然正常工作,无论我选择的实例大小如何,我都有同样的问题。在日志中没什么奇怪的。

我应该补充一点,我明确地使用以下命令确认消息:ch.acknowledge(delivery_info.delivery_tag,false)。

我有点难过,非常感谢你的帮助。如果我遗漏了任何重要细节,请告诉我。

一些示例代码:

ch = Bunny.new(connection_parameters).start.create_channel

ch.queue(queue).subscribe(consumer_tag: 'worker', block: true, manual_ack: true) do |delivery_info, _metadata, msg = q.pop|
     process_message msg
     ch.acknowledge(delivery_info.delivery_tag, false)
end

0 个答案:

没有答案