Multithreading 当连接和通道仍然打开时,使用者停止从RabbitMQ代理接收消息

Multithreading 当连接和通道仍然打开时,使用者停止从RabbitMQ代理接收消息,multithreading,rabbitmq,producer-consumer,bunny,cloudamqp,Multithreading,Rabbitmq,Producer Consumer,Bunny,Cloudamqp,我在其他线程上也看到过类似的问题,但没有一个有结论性的答案 我将启动大约4个消费者(用Ruby编写,使用Bunny客户端gem)订阅同一队列并处理消息,所有这些都可以正常工作,直到大约20000-40000条消息被消费。然后消费者就不再接收信息了。连接/通道保持打开状态,服务器仍然识别消费者,但他们只是不接收消息 我不认为这是一个预取问题,正如在类似的线程中所建议的那样。我已经在不同级别设置了预取,但它并没有解决问题。问题不在于单个消费者在其他消费者之前获取所有消息,而是所有消费者都被停止 我正

我在其他线程上也看到过类似的问题,但没有一个有结论性的答案

我将启动大约4个消费者(用Ruby编写,使用Bunny客户端gem)订阅同一队列并处理消息,所有这些都可以正常工作,直到大约20000-40000条消息被消费。然后消费者就不再接收信息了。连接/通道保持打开状态,服务器仍然识别消费者,但他们只是不接收消息

我不认为这是一个预取问题,正如在类似的线程中所建议的那样。我已经在不同级别设置了预取,但它并没有解决问题。问题不在于单个消费者在其他消费者之前获取所有消息,而是所有消费者都被停止

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

我应该补充一点,我使用:ch.acknowledge(delivery\u info.delivery\u标签,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

您能在问题中发布一些示例代码吗?这再现了问题?提前感谢Derick,我应该补充一点,消息处理不是轻量级的。它正在处理各种其他http请求等等。有没有办法判断这是否是超时/心跳问题?