訊息代理程式提供各種連線服務,以使用多種傳輸協定來支援應用程式與管理用戶端。與連線服務相關的代理程式配置特性,列於連線特性中。
表 4–1 顯示可用的連線服務,依據兩種特徵區分:
表 4–1 Message Queue 連線服務
服務名稱 |
服務類型 | |
---|---|---|
NORMAL | ||
NORMAL | ||
NORMAL | ||
NORMAL | ||
ADMIN |
TCP |
|
ADMIN |
TLS (SSL 型安全性) |
透過設定代理程式的 imq.service.activelist 特性,即可將代理程式配置為執行任一或所有這些連線服務。此特性的值是一組會在代理程式啟動時啟動的連線服務清單;若未明確指定此特性,將依預設啟動 jms 與 admin 服務。
每個連線服務也支援特定的認證與授權功能;如需更多資訊,請參閱安全性服務。
每種連線服務都是透過特定連接埠提供,此時需指定主機名稱 (或 IP 位址) 和連接埠號。您可以明確指定服務的靜態連接埠號,或由代理程式的連接埠對映器動態指定。連接埠對映器本身常駐於代理程式的主連接埠上,即通常位於標準連接埠號 7676 。(若有必要,您可以使用代理程式配置特性 imq.portmapper.port,以其他連接埠號來置換此值。)依預設,每個連線服務皆會在啟動時對連接埠對映器進行自我註冊。當用戶端建立與代理程式的連線時,Message Queue 用戶端執行階段會先連絡連接埠對映器,以請求連接埠號供需要的連線服務使用。
此外,您也可以使用 imq.serviceName.protocolType. port 配置特性置換連接埠對映器,並明確指定連線服務的靜態連接埠號 (其中 serviceName 與 protocolType 表示特定的連線服務,如表 4–1 所示)。(只有 jms、ssljms、admin 與 ssladmin 連線服務能夠以這種方式進行配置;httpjms 與 httpsjms 服務使用不同的配置特性,如附錄 CHTTP/HTTPS 支援 所述)。但是,靜態連接埠通常僅在特殊情況下使用,例如透過防火牆連線 (請參閱透過防火牆連線),一般不建議使用。
在具有兩部或更多主機的環境下 (例如在電腦上安裝了多張網路卡時),您可以使用代理程式特性來指定連線服務所要連結的主機。imq.hostname 特性可為所有連線服務指定單一的預設主機;而此預設值可在必要時,由下列特性所置換:imq.serviceName. protocolType.hostname (針對 jms、ssljms、admin 或 ssladmin 服務) 或 imq.portmapper.hostname (針對連接埠對映器本身)。
同時收到多個連接埠對映器請求時,這些請求會儲存在作業系統積存區中等候執行動作。imq.portmapper.backlog 特性會針對這些位於積存區中的請求,指定數量上限。超過此上限時,就會拒絕其他請求,直到積存區量降低為止。
每個連線服務均為多重執行緒,支援多重連線。代理程式會針對每個服務,在個別的執行緒池中維護這些連線所需的執行緒。在連線需要執行緒時,這些執行緒就會新增到執行緒池中,供支援該連線的服務使用。
您選擇的執行緒模型會指定執行緒是專屬於單一連線,還是由多個連線共用:
在專屬模型中,代理程式的每個連線均需要兩個執行緒:一個用於內送訊息,另一個用於外寄訊息。這會限制可支援的連線數量,但可確保較高的效能。
在共用模型中,連線在傳送或接收訊息時會由共用執行緒進行處理。此模型中的各個連線不需要專屬執行緒,因此能夠提高可用連線的數量,但會降低效能,因為必須使用較多資源來管理執行緒。
代理程式的 imq.serviceName. threadpool_model 特性,可指定已知連線服務應使用這兩種模型中的哪一種。此特性會採用下列兩個字串值之一: dedicated 或 shared。若未明確設定特性,則會依預設採用 dedicated。
您也可以設定代理程式特性 imq.serviceName. min_threads 與 imq.serviceName. max_threads,來指定服務執行緒池的最小與最大執行緒數。當可用的執行緒超過此最小臨界值時,Message Queue 將會在執行緒成為閒置狀態時關閉這些執行緒,直到再次達到最小值為止,以節省記憶體資源。在負載量較大的情況下,執行緒的數目會增加,直至達到執行緒池的最大數目為止;此時會拒絕新的連線,直至有執行緒變為可用為止。
共用執行緒模型會使用分散執行緒,將執行緒指定給使用中的連線。代理程式特性 imq.shared.connectionMonitor_limit 可指定由單一分散執行緒監視的最大連線數。此特性的值越小,執行緒指定給連線的速度就越快。imq.ping.interval 特性會指定一個以秒為單位的時間間隔,讓代理程式依此間隔定期測試 (「ping」) 連線,以驗證該連線是否仍在使用中,如此就可以預先偵測到連線失敗,避免所嘗試執行的訊息傳輸失敗。