Sun Java System Message Queue 3.7 UR1 管理指南

用戶端識別碼

每當代理程式必須為用戶端維護持續性狀態時,Java 訊息服務規格會要求連線提供唯一的用戶端識別碼。Message Queue 使用這類用戶端識別碼,追蹤主題目標的長期訂閱者。如果長期訂閱者變為非使用中的狀態,則代理程式會保留該主題的所有內送訊息,等到此訂閱者回復為使用中狀態時,再傳送這些訊息。代理程式會藉由用戶端識別碼來識別用戶。

用戶端應用程式可能會使用連線物件的 setClientID 方法,透過程式設計來設定自己的用戶端識別碼,因此很難協調用戶端識別碼並確保每個識別碼都是唯一的。通常比較好的方式是讓 Message Queue 在為用戶端建立連線時,自動指定唯一的識別碼。若要這麼做,請將連線工廠的 imqConfiguredClientID 屬性設定為下列格式的值

${u}factoryID

${u} 字元必須為屬性值的前四個字元。(在括弧之間若有 u 以外的其他字元,會造成在建立連線時丟出一個異常;如果是在其他位置,則這些字元並不具有任何特殊意義,而會被當作是純文字來處理。)factoryID 的值是唯一與此連線工廠物件關聯的字元字串。

為特定用戶端建立連線時,Message Queue 會以 u:userName 取代 ${u} 字元,以建構用戶端識別碼,其中 userName 是供連線認證的使用者名稱。這可確保指定連線工廠所建立的每個連線即便在其他方面都相同,也會有唯一的用戶端識別碼。例如,如果使用者名稱是 Calvin,而為連線工廠的 imqConfiguredClientID 屬性指定的字串是 ${u}Hobbes,則指定的用戶端識別碼會是 u:CalvinHobbes


備註 –

如果有兩個用戶端都使用預設的使用者名稱 guest 以嘗試取得連線,則無法使用此方案,因為對於這兩個用戶端的用戶端識別碼,其 ${u} 部分會完全相同。在這種情況下,只有第一個請求連線的用戶端才能取得連線,第二個嘗試連線的用戶端則會失敗,因為 Message Queue 無法使用同一用戶端識別碼建立兩個連線。


即使您使用 imqConfiguredClientID 指定用戶端識別碼,用戶端應用程式還是會使用連線方法 setClientID 置換此設定值。您可以將連線工廠的 imqDisableSetClientID 屬性設定為 true,以避免這種情況。請注意,對於使用長期訂閱者的應用程式,其用戶端識別碼必須以下列兩種方法之一進行設定:使用 imqConfiguredClientID 以管理員方式設定,或者使用 setClientID 以程式設計方式設定。