RabbitMQ 中的队列消息正在堆叠并等待单个消费者,而其他消费者可用。
我们使用 RabbitMQ 作为我们的信使服务。我们使用 bunny 创建连接并设置传递消息的队列。
在我们使用 bunny 的 rails 设置中,我们遇到了一个问题,即我们有一个队列,其中有 8 个消费者在该队列上侦听消息。当消息进来时,理想情况下,他们应该循环消费者,例如:队列中有 4 条消息,消费者 1 接收消息 1,-消费者 1 正忙,消费者 2 接收消息 2,消费者 2 正忙,消费者 3拿起消息 3,依此类推。
但是我们遇到的问题是,队列中有 4 条消息,消费者 1 拿起消息 1,消费者 1 忙,消费者 2-8 可用,但消息 2-4 堆叠在队列中等待消费者 1 可用并且处理消息。
我觉得我已经做了很多研究,只是无法弄清楚如何阻止消息堆积并等待单个消费者。
有没有人有这方面的经验,或者对如何解决这个问题有任何想法?
conn = Bunny.new(bunny[0])
conn.start
ch = conn.create_channel
q = ch.queue("#{record_queue_name}", :durable => true)
q.subscribe(:manual_ack => true, :arguments => {"x-priority" => 10}, :block => true) do |delivery_info, properties, payload|
ch.acknowledge(delivery_info.delivery_tag, false)
我们希望任何时候将任何消息发送到 RabbitMQ,消费者以先到先得的方式接收它们,而不是在其他消息可用时堆叠多条消息等待忙碌的消费者。
编辑:如何重现:同时启动 3 个消费者。推送 6 条消息 - 消费者 1 - 3 现在正忙于队列中的 3 条消息。重新启动 2 & 3,当 2 & 3 再次监听时,3 条消息仍在队列中等待消费者 1。消费者 2 和 3 仍然可用。
重新启动消费者 1,现在 3 个排队的消息首先到达新重新启动的消费者 2 和 3 的服务器。
无论消费者是否重新启动,我都需要消息先到先服务器。