2011-10-29 51 views
4

正如標題所說 - 當達到最大值時,是否可以聲明最大隊列大小和代理行爲?或者這是一個經紀人特定的選項?是否可以使用AMQP聲明最大隊列大小?

我問,因爲我想了解AMQP,並不是因爲我對任何特定經紀商都有這個具體問題......但經紀人特定的答案仍然是有見地的。

回答

3

AFAIK你不能用RabbitMQ聲明最大隊列大小。

也有一個在AMQP SEPC沒有這樣的設置:

http://www.rabbitmq.com/amqp-0-9-1-quickref.html#queue.declare

+0

嗯...有趣。那麼,如果消費者消失,大量AMQP代理的管理員如何確保不會發生壞事情? –

+0

RabbitMQ實現了協議的幾個擴展: 每隊列消息TTL和隊列租約。請參閱: http://www.rabbitmq.com/extensions.html#queue-ttl –

+4

RabbitMQ支持最大隊列長度http://www.rabbitmq.com/maxlength.html – mher

1

隨着qpid,是 可以confire maximun隊列大小和政治的情況下,提高最大。振鈴,忽略消息,斷開連接。 你也有lvq隊列(拉斯值)非常可配置

4

根據你問的原因,你可能並不需要最大的隊列大小。從2.0版本開始,RabbitMQ將無縫地將大隊列保存到磁盤,而不是將所有郵件存儲在RAM中。因此,如果您擔心代理崩潰,因爲它耗盡了資源,在大多數情況下,這實際上並不是什麼問題 - 假設您沒有綁定硬盤空間。

一般來說,這種持久性實際上對性能的影響很小,因爲根據定義,隊列中唯一「熱」的部分是頭部和尾部,它們留在RAM中;積壓的大部分是「冷」,所以它沒有什麼區別,而是坐在磁盤上。

我們最近發現,at high throughput it isn't quite that simple - 在某些情況下的吞吐量可能惡化爲隊列的增長,從而導致無界的隊列增長。但是,當發生這種情況是CPU的功能時,我們花了很長時間沒有碰到它。

0

有些事情你不能用經紀人做,但你可以在你的應用程序中做。例如,有兩個AMQP方法,basic.get和queue.declare,它們返回隊列中消息的數量。如果消息數量過高,您可以使用它來定期獲取未完成消息的計數並採取行動(如啓動新的消費者進程)。

相關問題