2013-07-18 98 views
5

對於這兩個術語有點困惑,我在想什麼是持久性消息,而是暫時性(非持久性)隊列的目的是什麼?畢竟,如果代理重新啓動且隊列未恢復,恢復的消息將被浪費。持久性和持久性概念AMQP中的混淆

回答

4

您可以擁有持久隊列,但是「真人版」的消息,因此在代理重新啓動後,您仍然可以擁有隊列,但它將是空的,反之亦然,但是當您悲傷時,是的,您將丟失隊列中的所有消息。

在您提供的消息持久性選項的組合中,它確實沒用,但不會導致錯誤。

但如果你綁定alternate exchange交流要發佈消息,這是耐用,重啓後,你可以將消息路由到它,如果你不具備瞬時隊列聲明。

實施例:

假設我們有這樣的組合和正確綁定隊列,Q*1接收消息M*1Q*2 - M*2

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable] 

我們發佈消息[Mt1/transient]和`[MD1 /耐用],我們會得到這樣的情況:

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable] 
[Mt1/transient] 
[Md1/durable] 

重啓後,我們會得到

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
           [Qax1/durable][Qax2/durable] 

我們發佈兩條消息再次,[Mt1/transient]和`[Md1 /耐用]:

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
           [Qax1/durable][Qax2/durable] 
           [Mt1/transient] 
           [Md1/durable] 

所以,再次重啓的券商:

[ Exchange-main/durable ] + [Exchange-alternate/durable] 
           [Qax1/durable][Qax2/durable] 
           [Md1/durable] 
+0

所以,當在相反情況下,我們有「致命的」隊列和持久性消息,重新啓動後,我們將結束與不用排隊,但之前分配給沒有更多消息現有的隊列,這是否意味着我們有懸掛的消息? – ahj

+0

消息將丟失。我用例子更新了我的答案,希望這會有所幫助。 – pinepain

+0

@pinepain:定義「消息將會丟失。」這是否意味着郵件已從磁盤上刪除,或者它們仍然在磁盤上,但因爲RabbitMQ不知道它們在哪裏而被孤立了? – Ellesedil