我正在成功使用RabbitMQ。但是,我有一个问题,如果我遇到队列中有大量消息的情况,那么消费者(Windows服务)会尝试获取所有消息,然后只是保留它们但从不动作或确认它们。 / p>
当处于就绪状态的消息数量较少时,消费者处理吞吐量就会很好,只要出现问题并且存在待办事项,那就太贪婪了。
有没有办法配置消费者在任何时候尝试并承担责任的最大消息数量?
我可以看到RequestedChannelMax
上的RabbitMQ.Client.ConnectionFactory
字段是否是正确设置以限制此内容?
由于
答案 0 :(得分:27)
默认情况下,消费者将读取带宽可以处理的消息数,而不管消费者的实际消息处理时间如何。
您需要通过修改频道的服务质量(QoS)来设置预取值,以限制它一次尝试接收的消息数量。查看basic.qos here。它有3个参数,一个大小(以八位字节为单位),一个计数(它将一次拾取的整个消息的数量)和一个全局标记。
This blog post是一个有趣的读物,如果您对优化吞吐量感兴趣并谈论预取约2/3的页面。
希望有所帮助!