Sun Java System Message Queue 3.7 UR1 管理指南

自動重新連線

您可以將連線工廠的 imqReconnectEnabled 屬性設定為 true,讓用戶端在連線失敗時,能自動重新連線至代理程式。imqReconnectAttempts 屬性會控制重新連線至指定代理程式位址的嘗試次數;imqReconnectInterval 會指定兩次連線嘗試之間的等待時間間隔 (以毫秒為單位)。

代理程式位址清單 (imqAddressList ) 在代理程式叢集中會指定多個位址,失敗的連線不只會在原始代理程式上復原,也會在叢集中其他代理程式上復原。如果重新連線至原始代理程式失敗,則用戶端執行階段將會嘗試清單中的其他位址。如上節所述,imqAddressListBehavior imqAddressListIterations 屬性會控制嘗試連線位址的順序,以及清單循環的次數。每個位址會以 imqReconnectInterval 毫秒的時間間隔重複嘗試,嘗試次數上限由 imqReconnectAttempts 指定。

自動重新連線支援訊息使用的所有用戶端確認模式。連線一旦重新建立,代理程式就會重新傳送之前已傳送但尚未確認的所有訊息,並使用 Redeliver 旗標加以標記。應用程式碼可使用此旗標來判斷是否有已使用但尚未確認的訊息。(但是,如果不是長期訂閱者,一旦關閉連線,代理程式將不會保留訊息。因此當連線關閉時,為這類訂閱者所產生的任何訊息將無法在重新連線後傳送,而會遺失。) 進行自動重新連線時會阻斷訊息的產生,因此訊息產生器在連線尚未重新建立之前,無法傳送訊息到代理程式。

自動重新連線可提供連線容錯移轉功能,但不提供資料容錯移轉功能:當用戶端重新連線至不同的代理程式實例時,失敗或連線中斷的代理程式所保留的永久性訊息和其他狀態資訊將會遺失。嘗試重新建立連線時,Message Queue 會維護用戶端執行階段所提供的物件 (例如階段作業、訊息用戶和訊息產生器)。當連線失敗時,也會保留暫時目標一段時間,因為用戶端可能會重新連線並再次存取這些目標;在用戶端利用這段時間重新連線並使用這些目標之後,代理程式就會刪除這些目標。如果重新連線後,無法在代理程式上完全復原用戶端狀態 (例如,當使用只有在連線期間才存在的已處理之階段作業時),將不會進行自動重新連線,而是會呼叫連線的異常處理程式。接著會由應用程式碼擷取異常、重新連線及復原狀態。