2013-10-03 133 views
15

我正在成功使用RabbitMQ。然而,如果我遇到队列中有很多消息的情况,那么我有一个问题,那么消费者(一个Windows服务)试图让它们全部消失,然后继续保持它们,但从不动作或确认它们。RabbitMQ如何扼杀消费者

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

有没有办法配置消费者在任何时候都会尝试并承担的最大消息数量?

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

感谢

+0

相关:http://stackoverflow.com/questions/29841690/how-to-consume-one-message – Nav

回答

21

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

您需要通过修改通道的服务质量(QoS)来设置预取值,以限制它一次尝试拾取多少条消息。退房basic.qos here。它有3个参数,一个大小(以字节为单位),一个计数(它将一次拾取的全部消息的数量)和一个全局标志。

This blog post如果您有兴趣优化吞吐量并谈论预取大约2/3下载页面的方式,这是一个有趣的阅读。

希望有帮助!

+1

感谢这是一个非常全面的答案,让我正确的我需要的东西。 '_model.BasicQos(0100,假);' – baynezy