0

我在其他线程上看到过类似的问题,但没有一个给出确凿的答案。

我将启动大约 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
4

0 回答 0