2013-06-24 57 views
2

我在一家可靠性模式使用AMQP和我的用例是把隊列中的郵件,然後消耗他們和信息插入到Web服務。我的Web服務很慢,我的隊列可以有很多很多的消息,我想確保消費者不會殺死我的數據庫。節流的AMQP消費者使用的RabbitMQ

是否有執行在RabbitMQ的節流一個內置的方式,無論是基於時間的(僅每分鐘/秒/小時X消息)或一些其它機制?

+0

只是爲了channel.flow相關評論:這已經從3.3.0版本棄用http://www.rabbitmq.com/blog/2014/04/02/breaking-things-with-rabbitmq-3- 3/ – hveiga

回答

2

per-connection流量控制,所以如果你有在服務器上太多的消息,出版商將等待。 RabbitMQ是非常可靠的系統,我可以說你不必擔心它。

如果你正在談論如何限制消費,可能你必須自己照顧它。您還可以看看上channel.flow(棄用的RabbitMQ 3.3.0)和basic.qos方法或你甚至可以暫時斷開消費者(S)和重新連接他們回來的時候你的服務將能夠採取的負荷。

UPD 我可以建議您使用basic.consume的消息並將其提供給您的Web服務。根據您的網絡服務流程負載的時間長短,您可能會猜測它是負載並執行某種類型的sleep(N)。當你的消費者睡覺時,它不會消耗任何東西,因此不會提供Web服務。

+0

我並不是真的擔心Broker的備份,如果我的AMQP連接器一次只能將所有的消息都拉出來,我更擔心我的Web服務負載過重。 – Nicholas

+0

您使用哪種語言編寫應用程序? – pinepain

+0

Java。我希望不必爲此編寫自己的邏輯,而RabbitMQ/AMQP可能有內置的東西。 – Nicholas

0

我想知道「每連接流量控制」是否與channel.flow()有關。

基本上你可以打電話channel.flow(false);通知經紀人停止發送消息。
調用channel.flow(true);使流程再次生效。這是javadoc