2014-07-25 53 views

回答

16

沒有x-message-ttl參數由代理端默認設置,所以基本上可以解釋默認值爲無窮大。

如果你沒有TTL沒有TTL設定排隊公佈消息(yupp,有每個消息,每個隊列TTL參數,請參閱下面的註釋):

  • 如果消息爲持續性和隊列發表聲明因爲持久性消息只要不會被消耗就會保持在隊列中;

  • 如果消息沒有公佈,爲持續性或隊列未聲明爲持續性,那麼消息將只要它不會被消耗掉,或者直到經紀人重啓留在隊列中。

TTL注:

當同時每個消息,每個隊列TTL組經紀人使用最少谷。例如,如果per-message ttl是10000(10秒)並且每個隊列ttl是20000(20秒),則將應用每個消息ttl。

每條消息的TTL注:

消息與過期TTL會留在隊列中,只要沒有達到隊列頭。不要擔心,他們不會被髮送給消費者,但他們會花費一些資源,直到他們達成目標。這就是RabbitMQ隊列的工作方式(它們堅持FIFO概念,有時可能會破壞與AMQP協議的嚴格兼容性)。有關更多信息,請參閱Caveats section in Time-To-Live Extensions

+2

消息保持在隊列中,直到他們「到達隊列頭」,但直到它們被傳遞給消費者並被確認或被拒絕(不重新排隊)爲止。在自動確認模式下,這意味着「只要它們被髮送出去」。 AMQP 0-9-1隊列是先進先出隊列,但重新排隊,這不清楚它應該如何工作。 RabbitMQ試圖保留消息的原始順序。 –

+0

當每條消息TTL到期時,該消息將不會從隊列中移除(它仍會使用一些資源,如內存或光盤),直到它不會到達隊列頭。有關詳細信息,請參閱rabbitmq.com/ttl.html#per-message-ttl-caveats。重新排隊也很明顯,消息不會從隊列中刪除,直到它們被確認(當使用自動確認時,它們會在代理端自動確認,而不管它們是否真正被客戶端使用)。 – pinepain