我在一家可靠性模式使用AMQP和我的用例是把隊列中的郵件,然後消耗他們和信息插入到Web服務。我的Web服務很慢,我的隊列可以有很多很多的消息,我想確保消費者不會殺死我的數據庫。節流的AMQP消費者使用的RabbitMQ
是否有執行在RabbitMQ的節流一個內置的方式,無論是基於時間的(僅每分鐘/秒/小時X消息)或一些其它機制?
我在一家可靠性模式使用AMQP和我的用例是把隊列中的郵件,然後消耗他們和信息插入到Web服務。我的Web服務很慢,我的隊列可以有很多很多的消息,我想確保消費者不會殺死我的數據庫。節流的AMQP消費者使用的RabbitMQ
是否有執行在RabbitMQ的節流一個內置的方式,無論是基於時間的(僅每分鐘/秒/小時X消息)或一些其它機制?
有per-connection流量控制,所以如果你有在服務器上太多的消息,出版商將等待。 RabbitMQ是非常可靠的系統,我可以說你不必擔心它。
如果你正在談論如何限制消費,可能你必須自己照顧它。您還可以看看上channel.flow(棄用的RabbitMQ 3.3.0)和basic.qos方法或你甚至可以暫時斷開消費者(S)和重新連接他們回來的時候你的服務將能夠採取的負荷。
UPD 我可以建議您使用basic.consume的消息並將其提供給您的Web服務。根據您的網絡服務流程負載的時間長短,您可能會猜測它是負載並執行某種類型的sleep(N)
。當你的消費者睡覺時,它不會消耗任何東西,因此不會提供Web服務。
我想知道「每連接流量控制」是否與channel.flow()有關。
基本上你可以打電話channel.flow(false);
通知經紀人停止發送消息。
調用channel.flow(true);
使流程再次生效。這是javadoc。
只是爲了channel.flow相關評論:這已經從3.3.0版本棄用http://www.rabbitmq.com/blog/2014/04/02/breaking-things-with-rabbitmq-3- 3/ – hveiga