【问题标题】:RabbitMQ how to throttle the consumerRabbitMQ 如何限制消费者
【发布时间】:2013-10-10 09:03:35
【问题描述】:

我正在成功使用 RabbitMQ。但是,我有一个问题,如果我遇到队列上有大量消息的情况,那么消费者(Windows 服务)会尝试获取所有消息,然后只保留它们,但从不采取行动或确认它们。

当处于就绪状态的消息数量较少时,消费者可以很好地处理吞吐量,如果出现问题并且有积压,那么它就会变得过于贪婪。

有没有办法配置消费者在任何时候尝试并负责的最大消息数?

我可以看到RabbitMQ.Client.ConnectionFactory 上的RequestedChannelMax 字段是限制这个的正确设置吗?

谢谢

【问题讨论】:

标签: rabbitmq


【解决方案1】:

默认情况下,消费者将读取带宽可以处理的尽可能多的消息,而不管消费者的实际消息处理时间。

您需要通过修改通道的服务质量 (QoS) 来设置预取值,以限制它一次尝试接收的消息数量。查看 basic.qos here。它有 3 个参数,一个大小(以八位字节为单位)、一个计数(一次接收的整个消息的数量)和一个全局标志。

This blog post 是一本有趣的读物,如果您对优化吞吐量感兴趣并谈论预取页面下方约 2/3 的内容。

希望有帮助!

【讨论】:

  • 谢谢,这是一个非常全面的答案,让我得到了我需要的东西。 _model.BasicQos(0,100,false);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2014-07-23
  • 2020-01-08
  • 2020-09-20
  • 1970-01-01
相关资源
最近更新 更多