2013-10-03 91 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