Sun Java System Message Queue 3.7 UR1 管理指南

連線處理

連線處理屬性會指定要連線至哪個代理程式位址,並會視需要指定偵測連線失敗和嘗試重新連線的方式。在表 16–1 有這些屬性的摘要說明。

代理程式位址清單

最重要的連線處理屬性是 imqAddressList ,該屬性會指定要與其建立連線的代理程式。此屬性值是一個字串,其中包含一個代理程式位址或 (如果是代理程式叢集) 由逗號分隔的多個位址。視所使用的連線服務 (請參閱連線服務) 和建立連線的方法之不同,代理程式位址可使用多種定址方案:

這些定址方案在表 16–2 中有所摘要。

每個代理程式位址的一般格式為

scheme://address

其中 scheme 是上述所列的其中一個定址方案,而 address 則表示代理程式位址本身。指定位址的確切語法會因定址機制而異,如表 16–2 中的最後一欄所示。表 16–3 顯示不同位址格式範例。

在有多個代理程式的叢集環境中,位址清單可包含多個代理程式位址。如果第一個連線嘗試失敗,Message Queue 用戶端執行階段會嘗試連線至清單中的另一個位址,以此類推,一直到清單上所有位址都試完為止。有兩個額外的連線工廠屬性會控制完成此作業的方式:

自動重新連線

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

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

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

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

定期測試 (Ping) 連線

Message Queue 用戶端執行階段可以配置成定期測試或「Ping」連線,在嘗試的訊息傳輸失敗前,就事先偵測到連線失敗。如果用戶端應用程式只是使用訊息而並不產生這些訊息,則此項測試特別重要,因為這類應用程式無法以其他方式偵測到連線失敗。很少產生訊息的用戶端也可受惠於此功能。

連線工廠屬性 imqPingInterval 會指定使用 Ping 指令偵測連線的頻率 (以秒為單位)。依預設,時間間隔設定為 30 秒,數值 -1 表示停用 Ping 作業。

Ping 失敗的回應會根據不同的作業系統平台而有所差異。在某些系統上,會立即對用戶端應用程式的異常偵聽程式丟出一個異常。(如果用戶端沒有異常偵聽程式,則該用戶端下次嘗試使用連線時將會失敗。)其他的系統可能會繼續嘗試建立與代理程式的連線,緩衝連續的偵測,直到偵測成功或緩衝區溢位為止。