2010-07-20 22 views
4

如果我使用持久訂閱,我可以重新啓動我的客戶端並重新訂閱而不丟失任何消息嗎? (假設,我的客戶不以任何方式退訂,讓我們說它只是崩潰)。持久訂閱可否在客戶端重新啓動後生存?

讓我澄清。 JMS 1.1規範說以下內容:

9.3.3.2使用持久訂閱

/* Reconnect to a durable subscription */ 
session.createDurableSubscriber(newsFeedTopic, "mySubscription"); 

但是重新連接到一個主題,也有需要注意的一些重要的限制:

  • 客戶端必須連接到相同的連接。
  • 目標和訂閱名稱必須相同。
  • 如果指定了消息選擇器,它也必須是相同的。

「同樣的連接」部分讓我感興趣。目前尚不清楚在這方面「同一」是什麼意思。

回答

2

在規範,看看4.3其中它提到,連接對象可以包含一個唯一的客戶標識符和4.3.2其中指出...

客戶端標識符的目的是關聯一個連接及其對象 由一個提供者代表客戶端維護的狀態。根據定義,由客戶端標識符標識的客戶端狀態一次只能由一個客戶端以「 」使用。 JMS提供者必須防止同時執行的客戶端使用 它。

所以這裏的目的是使長期訂閱包含一個唯一的標識符,這樣當應用程序重新訂閱它可以連接到正確的狀態,賣場裏的消息已經在其沒有被排隊。由於這樣做的首選方式是在客戶端特定的連接對象中編碼標識符,該規範指示您使用相同的連接重新連接,但在這種情況下,這意味着相同的管理對象不相同的連接句柄(使用WMQ術語)。

當然,你不需要管理對象,應用程序可以動態地生成連接。在這種情況下,您需要安排它爲相繼的備註使用相同的客戶端標識符。

1

如果沒有活動的訂閱者進行持久訂閱,那麼JMS會保留訂閱的消息,直到訂閱者接收到或直到它們過期或直到刪除持久訂閱爲止。這使用戶應用程序可以在一段時間內與JMS提供程序斷開連接,然後重新連接到提供程序並處理在其不在期間發佈的消息。

相關問題