在使用HornetQ(基於standalone-full.xml配置)配置JBoss 7上的JMS隊列期間,我注意到了一個屬性'durable'。JBoss 7中使用HornetQ的JMS Queue的'durable'屬性的含義是什麼?
我瀏覽幾個來源,其中許多人表示隊列總是「耐用」,意思是消息將始終交付,即使在潛在接收方處於發送的時間不活躍的情況下。
JBoss 7 HornetQ中的這個屬性是指臨時隊列嗎?或者這個屬性是指某種非臨時的非持久隊列?
在使用HornetQ(基於standalone-full.xml配置)配置JBoss 7上的JMS隊列期間,我注意到了一個屬性'durable'。JBoss 7中使用HornetQ的JMS Queue的'durable'屬性的含義是什麼?
我瀏覽幾個來源,其中許多人表示隊列總是「耐用」,意思是消息將始終交付,即使在潛在接收方處於發送的時間不活躍的情況下。
JBoss 7 HornetQ中的這個屬性是指臨時隊列嗎?或者這個屬性是指某種非臨時的非持久隊列?
經過簡短的調查,我得出了一些結論。所有的觀察都基於JBoss 7.1.1.Final與HornetQ Server 2.2.13.Final。
非持久隊列不是臨時隊列。它一直存在,直到它被手動刪除。
提交給非持久隊列的所有消息在JMS提供程序重啓/失敗(交付模式,即提交的消息的PERSISTENT/NON_PERSISTENT被忽略)後消失。
消息的JMSDeliveryMode頭元素的值未被修改。特別是,如果消息以PERSISTENT傳送模式提交給非持久隊列,則該標誌設置爲PERSISTENT,即使非持久隊列不會持久保留消息(在JMS提供程序重新啓動/失敗的情況下它將丟失)。
從它似乎是有點令人不安的前景,因爲發送者可能不知道是否該消息的宣佈交付模式將不被尊重的方式,客戶端由於有問題的意義'非耐用'隊列。
此外,在這種情況下,術語「持久隊列」似乎與「持久訂閱」不相關,因爲它似乎不會以任何方式影響向非活動消費者傳遞消息。
JMS中的持久訂閱意味着如果訂閱者斷開連接並再次連接到JMS目標(隊列或主題),它將接收到目前爲止已發送到目的地並且尚未過期的所有消息。
我覺得「Durable」這個詞比隊列更適用於主題。持久訂閱是當訂閱者未運行時由訂閱者提供的發佈者存儲的持久訂閱。一旦用戶激活,這些存儲的消息將被傳送給該用戶。對於非耐用用戶,如果他們不活躍,將不會收到任何出版物。
對於隊列,消息被保存在隊列中,直到有人收到它們或者它們到期。這些消息可以是持久的,這意味着它們將在消息傳遞提供程序的重新啓動以及在消息傳遞提供程序關閉時消息丟失的非持久性中繼續存在
請注意,JBoss上的屬性似乎是指隊列,而不是訂閱者/訂閱。 – acalypso