26

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

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

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

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

谢谢

4

1 回答 1

39

默认情况下,无论消费者的实际消息处理时间如何,消费者都会读取带宽可以处理的尽可能多的消息。

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

如果您对优化吞吐量感兴趣并谈论预取页面下方约 2/3 的内容,那么这篇博文是一本有趣的文章。

希望有帮助!

于 2013-10-03T16:03:03.683 回答