Message Queue 用戶端效能取決於用戶端的設計,以及您配置和管理 Message Queue 服務的方式。本章將更詳細地說明第一章中介紹的 Message Queue 服務,檢查服務的元件、介紹用以配置這些元件的工具,並總結在不同環境中管理訊息服務所需的工作。本章涵蓋以下各節:
圖 3–1 所示為 Message Queue 服務。第 2 章, 用戶端程式設計模型已描述程式設計模型,以及用戶端如何使用 Java 和 C API 與用戶端執行階段 (存取用戶端應用程式的一部分訊息服務) 互動。本章側重介紹存取管理員的訊息服務之元件及服務。
您可以透過設定代理程式特性來控制 Message Queue 服務。這些特性根據某個特性所影響的服務或代理程式元件,劃分為多個種類。代理程式服務包括:
以下各節描述每項服務,並總結針對特殊需求用以自訂服務的特性。
代理程式特性可在不同的配置檔案中定義,也可在用於啟動代理程式的指令行上定義。「Sun Java System Message Queue 3.7 UR1 管理指南」中的第 4 章「配置代理程式」會說明這些配置檔案,以及用一個檔案的特性值置換其他檔案特性值的優先順序。使用啟動指令設定的特性可置換所有其他設定。
您可以使用連線相關的特性,配置和管理代理程式及其用戶端之間的實體連線。連線至代理程式介紹 Message Queue 用戶端可用的連線服務,其中描述的可用連線服務如下:服務的名稱、類型和基礎協定。連線服務為多重執行緒,並透過專屬連接埠使用,此專屬連接埠可由代理程式的連接埠對映器動態指定,或由管理員靜態指定。依預設,啟動代理程式時,jms 和 admin 服務會啟動並執行。
由於每個連線均涉及兩方,兩端都會發生連線配置,因此需要協調:
用戶端必須配置連線工廠物件的部分屬性,才能要求非預設的連線服務、主機和連接埠;指定要連線的代理程式清單,以備需要重新連線到其他代理程式時使用;以及配置重新連線的運作方式。用戶端也可以指定 Ping 間隔,以測試失敗的連線。
而對於管理員,則可以使用代理程式特性啟動非預設的連線服務、視需要指定靜態連接埠、配置執行緒,並指定在使用多張網路卡的情況下所要連線的主機。管理員也可以指定 Ping 間隔,以測試是否可以存取用戶端,這對管理資源很有用。
用戶端可以透過防火牆連線到 Message Queue 服務。若要這麼做,可以請防火牆管理員開啟特定的連接埠,然後連線到該 (靜態) 連接埠;或者使用附錄 BMessage Queue 功能 中總結的 HTTP 或 HTTPS 服務。
每個連線服務也支援特定認證與授權功能。請參閱安全性服務,以取得更多資訊。
常駐在代理程式主連接埠 7676 的共用連接埠對映器會為連線服務動態指定連接埠。當 Message Queue 用戶端執行階段設定與代理程式的連線時,會先連絡連接埠對映器,為選擇的連線服務請求連接埠號。
配置連線服務時,可以指定 jms、ssljms、admin 與 ssladmin 連線服務的靜態連接埠號,以置換連接埠對映器。但是,靜態連接埠通常僅在特殊情況下使用,例如透過防火牆連線,一般不建議使用。
每個連線服務均為多重執行緒,支援多重連線。這些連線所需的執行緒由代理程式在執行緒池中維護。其配置方式則取決於您為最小執行緒與最大執行緒所指定的值,以及您所選擇的執行緒模型。
您可以設定代理程式特性,指定執行緒的最小數值和最大數值。當連線需要執行緒時,就會為支援該連線的服務新增執行緒到執行緒池數。最小值會指定可配置的執行緒數。當可用的執行緒超過此最小臨界值時,系統會在執行緒成為閒置狀態時關閉這些執行緒,直到再次達到最小值為止,以節省記憶體資源。在負載量較大的情況下,執行緒的數目會增加,直至達到執行緒池的最大數目為止;此時會拒絕新的連線,直至有執行緒變為可用為止。
您選擇的執行緒模型會指定執行緒是專屬於單一連線,或者由多個連線共用:
在專屬模型中,代理程式的每個連線均需要兩個執行緒:一個用於內送訊息,另一個用於外寄訊息。這會限制可能的連線數量,但會提高效能。
在共用模型中,連線在傳送或接收訊息時會由共用執行緒進行處理。因為每個連線不需要專屬的執行緒,所以此模型會增加可能連線的數量,但是執行緒管理的耗用時間也會增加,進而會影響效能。
用戶端連線至代理程式後,即可路由訊息及傳送訊息。在此階段中,代理程式會負責建立與管理不同類型的實體目標,確保訊息流量順暢,以及有效使用資源。代理程式使用與路由和目標相關的代理程式特性,以符合應用程式所需的方式來管理這些工作。
請記住,代理程式上的實體目標,是訊息在傳送到訊息用戶之前所儲存的記憶體位置。實體目標有四種:
管理員建立的目標由管理員使用 GUI (imqadmin) 或 imqcmd 公用程式所建立。這些目標對應到以程式設計方式建立的邏輯目標,或對應到由管理員建立並供用戶端查找的目標受管理物件。您可以使用 imqcmd 公用程式,為每個管理員建立的目標設定或更新特性。
自動建立的目標會在每次訊息用戶或產生器嘗試存取不存在的目標時,由代理程式自動建立。這些目標一般會在開發期間使用。您可以設定代理程式特性,以防止建立此類目標。您可以設定代理程式特性,以在特定代理程式上配置所有自動建立的目標。
代理程式會自動銷毀以後不再使用的自動建立目標;亦即,當此目標沒有使用者用戶端且不再包含任何訊息時,就會自動銷毀。如果代理程式重新啟動,則只有在目標包含永久性訊息時,才會重新建立這類目標。
暫時目標由需要目標 (用於接收訊息回覆) 的用戶端,透過程式設計方式明確建立和銷毀。如其名稱所示,這些目標是暫時的,僅在建立的連線期間由代理程式維護。
暫時目標不會永久儲存,也不會在代理程式重新啟動時再次建立,但是它們對於管理工具而言是可見的。
停用的訊息佇列是代理程式啟動後自動建立的專用目標,用於儲存停用的訊息以備診斷之用。您可以使用 imqcmd 公用程式,設定停用的訊息佇列特性。
您可以使用 imqcmd 公用程式管理目標。管理目標包括下列一項或多項工作:
建立、暫停、繼續或銷毀目標
列出代理程式上的所有目標
顯示目標狀態與特性的相關資訊
顯示目標的度量資訊
壓縮目標用於存留訊息的磁碟空間
更新實體目標的特性
管理作業會隨所管理的目標類型而變更:管理員建立的目標、自動建立的目標、暫時目標或停用的訊息佇列。例如,暫時目標不需要明確銷毀,自動建立的特性會經由代理程式配置特性配置,並套用到該代理程式上所有自動建立的目標。
為了最佳化效能,您可以在建立或更新實體目標時設定特性。可以設定的特性包括下列項目:
目標的類型和名稱。
目標的個別限制和總計限制 (訊息的最大數目、最大總位元組數、每則訊息的最大位元組數、產生器的最大數目)。
超過個別限制或總計限制時,代理程式應執行的操作。
單一批次可以傳送的最大訊息數目。
目標的停用訊息是否應傳送到停用的訊息佇列。
如果是叢集代理程式,目標是否應複製到叢集的其他代理程式。
您也可以針對佇列目標配置備份用戶的最大數目,並且可以 (針對叢集代理程式) 指定是否要優先傳送到本機佇列。
您也可以配置停用的訊息佇列的限制和運作方式。不過請注意,此佇列的預設特性和標準佇列的預設特性不同。
目標可能使用大量資源 (取決於它們處理的訊息數目和大小,以及註冊的用戶數目和期限),因此必須密切管理這些資源,以確保良好的訊息傳送服務效能與可靠性。
您可以設定特性,以避免代理程式有過多的內送訊息,進而避免代理程式記憶體不足。代理程式使用三層記憶體保護,以在資源不足時維持訊息傳送服務作業:目標限制、系統範圍限制和系統記憶體臨界值。理想情況下,如果目標限制和系統範圍限制設定適當,則應絕對不會到達嚴重的系統記憶體臨界值。
您可以設定目標屬性,以管理每個目標的記憶體和訊息流量。例如,您可以指定允許用於目標的產生器最大數目、目標中允許的最大訊息數量 (或大小),以及每個單一訊息的最大大小。
您也可以指定到達這類限制時,代理程式應採取的反應措施:減緩產生器、捨棄最舊的訊息、捨棄最不重要的訊息,或拒絕最新的訊息。
您也可以使用特性,設定套用到代理程式上所有目標的限制:可以指定訊息總數和所有訊息使用的記憶體。如果達到整個系統的任何訊息限制,代理程式就會拒絕新的訊息。
最後,可以使用特性來設定臨界值,當到達臨界值時,代理程式會採取越來越嚴格的動作,以防止記憶體超過負載。此動作取決於記憶體資源的狀態:green (大量記憶體可用)、yellow (代理程式記憶體正在減少)、orange (代理程式記憶體不足),以及 red (代理程式無記憶體可用)。如果代理程式記憶體的狀態從 green 變為 red,代理程式會採取越來越嚴格的動作:
捨棄資料存放區中永久性訊息的內部記憶體副本。
減少產生器產生的非永久性訊息,最終使訊息停止流入代理程式。永久性訊息流量會自動受到代理程式對每個訊息要求的限制。
如果代理程式要在失敗時回復,則此代理程式需要重新建立其訊息傳送作業的狀態。若要執行此操作,代理程式必須將狀態資訊儲存到資料存放區。重新啟動代理程式時,它會使用儲存的資料來重新建立目標和長期訂閱、回復永久性訊息、回復開啟的作業事件,並為未傳送的訊息重新建立路由表格。接著就可以重新繼續訊息傳送。
Message Queue 服務支援檔案式永久性模組和 JDBC 相容的永久性模組 (請參閱圖 3–2),且預設使用檔案式永久性模組。
檔案式永久性機制使用個別檔案儲存永久性資料。如果您使用檔案式永久性,您可以設定代理程式特性執行下列作業:
壓縮資料存放區以減少因新增和移除訊息而產生的分段程序。
在每次寫入時,同步內部記憶體狀態與實體儲存裝置。這有助於消除因系統當機而產生的資料遺失。
管理配置訊息到資料存放檔案,以及管理檔案管理和儲存所需的資源。
檔案式永久性通常快於 JDBC 型永久性;但是某些使用者偏好 JDBC 相容存放區所提供的備援和管理控制功能。
JDBC 型永久性使用 Java 資料庫連結 (JDBCTM) 介面,將代理程式連線到 JDBC 相容的資料存放區。若要讓代理程式透過 JDBC 驅動程式存取資料存放區,您必須執行下列作業:
設定與 JDBC 相關的代理程式配置特性。使用這些特性指定所使用的 JDBC 驅動程式、認證代理程式為 JDBC 使用者、建立所需的表格等等。
使用 imqdbmgr 公用程式以使用適當的模式來建立資料存放區。
「Sun Java System Message Queue 3.7 UR1 管理指南」中的第 4 章「配置代理程式」,詳細介紹完成這些工作和相關配置特性的完整程序。
Message Queue 服務支援每個代理程式實例的認證和授權 (存取控制),也支援加密:
認證可確保只有經過驗證的使用者可以建立與代理程式的連線。
授權可指定哪些使用者或群組有存取資源及執行特定作業的權限。
加密可保護訊息,以防透過連線傳送時遭到篡改。
認證和授權取決於包含有關訊息傳送系統使用者資訊 (如使用者名稱、密碼和群組成員身份) 的儲存庫。此外,若要授權特定作業給使用者或群組,則代理程式必須檢查指定使用者或群組可執行作業的存取控制特性檔案 。您負責設定代理程式需要認證使用者和授權使用者動作的資訊。
圖 3–3 顯示代理程式提供認證與授權服務時所需的元件。
如圖 3–3 所示,您可以在 Message Queue 服務隨附的平面檔案使用者儲存庫中儲存 使用者資料,也可以外掛於預先存在的 LDAP 儲存庫中。您可以設定代理程式特性來表示您的選擇。
如果要使用現有的 LDAP 伺服器,可以使用 LDAP 供應商提供的工具來寫入和管理此使用者儲存庫。此外,必須在代理程式實例配置檔案中設定特性,讓代理程式能查詢 LDAP 伺服器,以取得使用者和群組的相關資訊。
如果延展性很重要,或者如果需要讓不同代理程式共用儲存庫,則選擇使用 LDAP 比較好。如果使用代理程式叢集,可能也屬於這種情況。
當用戶端請求連線時,該用戶端必須提供使用者名稱和密碼。代理程式會對指定名稱和密碼與儲存在使用者儲存庫中的名稱和密碼進行比較。將此密碼從用戶端傳送至代理程式時,系統會使用 Base64 編碼或訊息摘要 (MD5) 雜湊法,對密碼進行編碼。MD5 用於平面檔案儲存庫,LDAP 儲存庫則需要 Base64 編碼。如果使用 LDAP,可能會需要使用安全 TLS 協定。您可以設定代理程式特性以分別配置每種連線服務所使用的編碼類型,或在代理程式範圍基礎上設定編碼。
當使用者嘗試執行作業時,代理程式會檢查使用者名稱和群組成員身份 (從使用者儲存庫),是否與為存取此作業所指定 (在存取控制特性檔案中) 的名稱和成員身份相符。存取控制特性檔案可指定以下作業的授權給使用者或群組:
連線至代理程式
存取目標:為任何給定目標或所有目標建立用戶、產生器或佇列瀏覽器
自動建立目標
設定代理程式特性,以指定下列資訊:
若要加密在用戶端與代理程式之間傳送的訊息,您需要使用基於安全傳輸層 (SSL) 標準的連線服務。透過在已啟用 SSL 的代理程式與已啟用 SSL 的用戶端之間建立已加密連接,SSL 可提供連接級別的安全性。
您可以設定代理程式特性,以指定要使用的 SSL 金鑰庫安全性特性,以及密碼檔案的名稱和位置。
代理程式包含可監視和診斷應用程式和代理程式效能的元件。這些元件包括:
產生資料的元件,即度量產生器與記錄事件的代理程式程式碼。
記錄程式元件,可將輸出資訊寫入到多個輸出通道。
訊息產生器,可將包含度量資訊的 JMS 訊息傳送到 JMS 監視用戶端使用的主題目標。
圖 3–4 說明一般方案。
度量產生器可提供代理程式活動的相關資訊,例如傳入和傳出代理程式的訊息流量、代理程式記憶體中的訊息數量和使用的記憶體、開啟連線的數量,以及使用的執行緒數量。
您可以設定代理程式特性,以開啟或關閉度量資料的產生,並指定產生度量報告的頻率。
Message Queue 記錄程式會擷取代理程式程式碼與度量產生器所產生的資訊,並將此資訊寫入標準輸出 (主控台)、記錄檔;若在 SolarisTM 平台上,在發生錯誤時則會寫入 syslog 常駐程式程序。
您可以設定代理程式特性,以指定記錄程式收集的資訊類型,以及寫入每個輸出通道的類型。在記錄檔中,您還可以指定關閉記錄檔的位置以及將輸出自動重建至新檔案的位置。一旦記錄檔達到指定容量或存在時間,系統將儲存此記錄檔並建立新的記錄檔。
如需配置記錄程式以及如何使用它來取得效能資訊的詳細資訊,請參閱「Sun Java System Message Queue 3.7 UR1 管理指南」中的「配置及使用代理程式記錄功能」。
圖 3–4 顯示的度量訊息產生者會在固定時間間隔,從度量產生器收到資訊,並將資訊寫入訊息,接著根據訊息中包含的度量資訊類型,將訊息傳送到其中一個度量主題目標。
訂閱至這些度量主題目標的 Message Queue 用戶端,可使用目標中的訊息,並處理訊息中所包含的度量資料。這允許開發者建立自訂監視工具以支援訊息傳送應用程式。如需每個度量訊息類型中所報告之度量數目的詳細資訊,請參閱「Sun Java System Message Queue 3.7 UR1 管理指南」中的第 18 章「度量參照」。如需有關如何配置度量訊息產生的詳細資訊,請參閱「Sun Java System Message Queue 3.7 UR1 Developer’s Guide for Java Clients」中的第 4 章「Using the Metrics Monitoring API」,以及「Sun Java System Message Queue 3.7 UR1 管理指南」中的「撰寫應用程式來監視代理程式」。
本節描述用於配置 Message Queue 服務的工具,以及完成支援開發或生產環境所需的工作。
圖 3–5 顯示除用戶端連線以外的訊息服務檢視,並著重在代理程式元件和用以管理這些元件的工具。
您可以使用下列指令行工具,配置及管理 Message Queue 服務。
使用 imqbrokerd 公用程式啟動代理程式。您可以使用 imqbrokerd 指令的選項,指定代理程式是否應在叢集中連線,並指定其他啟動配置資訊。
啟動代理程式後,使用 imqcmd 公用程式建立、更新和刪除實體目標,控制代理程式及其連線服務,並且管理代理程式的資源。
GUI 型管理主控台結合 imqcmd 和 imqobjmgr 公用程式的部分功能。您可以用於執行下列作業:
連接至代理程式並進行管理。
建立和管理實體目標。
連線到物件存放區,增加物件到存放區,並管理這些物件。
開發用戶端元件時,最好保持最低的管理工作量。Message Queue 產品是專為協助您執行此作業所設計,從包裝盒中取出即可使用。只需啟動代理程式即可。下列作業會讓您專注在開發工作上:
使用資料存放區 (內建檔案永久性)、使用者儲存庫 (檔案式) 以及存取控制特性檔案的預設實作。這些適用於開發測試。預設使用者儲存庫會使用預設實體建立,可讓您在安裝後立即使用代理程式。您可以使用預設使用者名稱 (guest) 與密碼 (guest) 以認證用戶端。
使用簡單的檔案系統物件存放區 (透過建立一個目錄來實現此目的),並在其中儲存受管理物件。如果您根本不想建立存放區,也可以直接在程式碼中創設受管理物件。
使用自動建立的實體目標,而不是在代理程式上明確建立這些目標。請參閱適當的開發者指南以取得資訊。
在生產環境中,訊息服務管理在應用程式效能和滿足企業延展性、可用性和安全性需求上,發揮關鍵作用。在此環境中,管理員還要執行多項工作。這些工作大致上可分為設定與維護作業。
一般必須執行下列設定作業:
安全管理存取
不論您使用檔案式儲存庫或 LDAP 使用者儲存庫,請確定管理員在 admin 群組中且有安全密碼。視需要為管理員建立進入代理程式的安全連線。
安全用戶端存取
不論您使用檔案式儲存庫或 LDAP 使用者儲存庫,請將可存取訊息服務的使用者名稱寫入使用者儲存庫,並編輯存取控制特性檔案,以便為這些使用者提供適當的授權。視需要設定 SSL 型連線服務。為避免未經認證的連線,請務必變更「guest」使用者的密碼。
建立和配置實體目標
設定目標屬性,以使代理程式資源能支援訊息數目和為訊息配置的記憶體容量。
建立和配置受管理物件。
如果您想使用 LDAP 物件存放區,請配置並設定該存放區。建立並配置連線工廠和目標受管理物件。
若需要有狀態的水平延展能力,請建立代理程式叢集。
建立中央配置檔案並指定主代理程式。
若要監視和控制代理程式資源,以及調校應用程式效能,必須在部署應用程式之後,執行下列作業:
支援和管理應用程式用戶端
監視和管理目標、長期訂閱和作業事件
停用自動建立的功能
監視和管理停用的訊息佇列
監視與調校代理程式
回復失敗的代理程式
監視、調校和重新配置代理程式
管理代理程式記憶體資源
視需要延伸叢集
管理受管理物件
視需要建立其他受管理物件,並調整連線工廠屬性以改善效能與流量。
Message Queue 服務可以連線多個代理程式並允許其共用資訊,來進行水平延展。這可讓任一代理程式存取遠端目標,並為大量用戶端提供服務。如需更多資訊,請參閱第 4 章, 代理程式叢集。