如何通过RabbitMQ管理队列并根据队列大小调整更多工作者

时间:2016-11-25 17:25:24

标签: memory-management queue rabbitmq worker

如果队列中的消息达到队列的大小或我在rabbitmq中指定的某个限制,而不是监视队列并启动另一个实例,我试图看看我是否可以让我的rabbitmq启动另一个worker手动工人。非常感谢任何建议。

2 个答案:

答案 0 :(得分:0)

我认为一个解决方案可能是你有一个"队列"管理“消费者”的工作者"工作人员。 "队列" worker不断轮询队列,询问队列消息的计数。当消息计数达到某个阈值(上升或下降)时,"队列"工作人员启动消费者从池中取出它或阻止正在运行的消费者。

"队列"工作人员必须保持活跃消费者数量的状态,以便了解是否必须启动一个新的消费者"工人。

用于计算是否有必要启动/停止新消费者的原始示例或公式可能是:

START integer_part(number_of_messages_in_queue / threshold)> active_cosumers_workers_count

STOP integer_part(number_of_messages_in_queue / threshold)< active_cosumers_workers_count

示例:

  • threshold = 10
  • 队列中的邮件数量= 49
  • 活跃消费者工人数= 4

integer_part(49/10)> 4 - > 4> 4 - >假(什么都不做)

integer_part(49/10)> 4 - > 4< 4 - >假(什么都不做)

  • threshold = 10
  • 队列中的邮件数= 50
  • 活跃消费者工人数= 4

integer_part(50/10)> 4   - > 5> 4 = true(旋转新"工人"消费者)

  • threshold = 10
  • 队列中的邮件数量= 39
  • 活跃消费者工人数= 4

integer_part(39/10)< 4   - > 3< 4 =真(停止"工人"消费者)

答案 1 :(得分:0)

rabbitmq-management插件提供基于HTTP的API,用于管理和监控Rab​​bitMQ服务器。一个想法是轮询HTTP API队列长度并根据长度启动或取消工作人员。