Sun Java System Message Queue 3.7 UR1 技術摘要

第 3 章 Message Queue 服務

Message Queue 用戶端效能取決於用戶端的設計,以及您配置和管理 Message Queue 服務的方式。本章將更詳細地說明第一章中介紹的 Message Queue 服務,檢查服務的元件、介紹用以配置這些元件的工具,並總結在不同環境中管理訊息服務所需的工作。本章涵蓋以下各節:

元件服務

圖 3–1 所示為 Message Queue 服務。第 2 章, 用戶端程式設計模型已描述程式設計模型,以及用戶端如何使用 Java 和 C API 與用戶端執行階段 (存取用戶端應用程式的一部分訊息服務) 互動。本章側重介紹存取管理員的訊息服務之元件及服務。

圖 3–1 Message Queue 服務

Message Queue 服務的元件。物件存放區、用戶端、用戶端執行階段、代理程式、管理主控台。圖以文字介紹。

您可以透過設定代理程式特性來控制 Message Queue 服務。這些特性根據某個特性所影響的服務或代理程式元件,劃分為多個種類。代理程式服務包括:

以下各節描述每項服務,並總結針對特殊需求用以自訂服務的特性。

代理程式特性可在不同的配置檔案中定義,也可在用於啟動代理程式的指令行上定義。「Sun Java System Message Queue 3.7 UR1 管理指南」中的第 4 章「配置代理程式」會說明這些配置檔案,以及用一個檔案的特性值置換其他檔案特性值的優先順序。使用啟動指令設定的特性可置換所有其他設定。

連線服務

您可以使用連線相關的特性,配置和管理代理程式及其用戶端之間的實體連線。連線至代理程式介紹 Message Queue 用戶端可用的連線服務,其中描述的可用連線服務如下:服務的名稱、類型和基礎協定。連線服務為多重執行緒,並透過專屬連接埠使用,此專屬連接埠可由代理程式的連接埠對映器動態指定,或由管理員靜態指定。依預設,啟動代理程式時,jmsadmin 服務會啟動並執行。

由於每個連線均涉及兩方,兩端都會發生連線配置,因此需要協調:

用戶端可以透過防火牆連線到 Message Queue 服務。若要這麼做,可以請防火牆管理員開啟特定的連接埠,然後連線到該 (靜態) 連接埠;或者使用附錄 BMessage Queue 功能 中總結的 HTTP 或 HTTPS 服務。

每個連線服務也支援特定認證與授權功能。請參閱安全性服務,以取得更多資訊。

連接埠對映器

常駐在代理程式主連接埠 7676 的共用連接埠對映器會為連線服務動態指定連接埠。當 Message Queue 用戶端執行階段設定與代理程式的連線時,會先連絡連接埠對映器,為選擇的連線服務請求連接埠號。

配置連線服務時,可以指定 jmsssljmsadminssladmin 連線服務的靜態連接埠號,以置換連接埠對映器。但是,靜態連接埠通常僅在特殊情況下使用,例如透過防火牆連線,一般不建議使用。

執行緒池管理

每個連線服務均為多重執行緒,支援多重連線。這些連線所需的執行緒由代理程式在執行緒池中維護。其配置方式則取決於您為最小執行緒與最大執行緒所指定的值,以及您所選擇的執行緒模型。

您可以設定代理程式特性,指定執行緒的最小數值和最大數值。當連線需要執行緒時,就會為支援該連線的服務新增執行緒到執行緒池數。最小值會指定可配置的執行緒數。當可用的執行緒超過此最小臨界值時,系統會在執行緒成為閒置狀態時關閉這些執行緒,直到再次達到最小值為止,以節省記憶體資源。在負載量較大的情況下,執行緒的數目會增加,直至達到執行緒池的最大數目為止;此時會拒絕新的連線,直至有執行緒變為可用為止。

您選擇的執行緒模型會指定執行緒是專屬於單一連線,或者由多個連線共用:

目標與路由服務

用戶端連線至代理程式後,即可路由訊息及傳送訊息。在此階段中,代理程式會負責建立與管理不同類型的實體目標,確保訊息流量順暢,以及有效使用資源。代理程式使用與路由和目標相關的代理程式特性,以符合應用程式所需的方式來管理這些工作。

請記住,代理程式上的實體目標,是訊息在傳送到訊息用戶之前所儲存的記憶體位置。實體目標有四種:

管理目標

您可以使用 imqcmd 公用程式管理目標。管理目標包括下列一項或多項工作:

管理作業會隨所管理的目標類型而變更:管理員建立的目標、自動建立的目標、暫時目標或停用的訊息佇列。例如,暫時目標不需要明確銷毀,自動建立的特性會經由代理程式配置特性配置,並套用到該代理程式上所有自動建立的目標。

配置實體目標

為了最佳化效能,您可以在建立或更新實體目標時設定特性。可以設定的特性包括下列項目:

您也可以針對佇列目標配置備份用戶的最大數目,並且可以 (針對叢集代理程式) 指定是否要優先傳送到本機佇列。

您也可以配置停用的訊息佇列的限制和運作方式。不過請注意,此佇列的預設特性和標準佇列的預設特性不同。

管理記憶體

目標可能使用大量資源 (取決於它們處理的訊息數目和大小,以及註冊的用戶數目和期限),因此必須密切管理這些資源,以確保良好的訊息傳送服務效能與可靠性。

您可以設定特性,以避免代理程式有過多的內送訊息,進而避免代理程式記憶體不足。代理程式使用三層記憶體保護,以在資源不足時維持訊息傳送服務作業:目標限制、系統範圍限制和系統記憶體臨界值。理想情況下,如果目標限制和系統範圍限制設定適當,則應絕對不會到達嚴重的系統記憶體臨界值。

目標訊息限制

您可以設定目標屬性,以管理每個目標的記憶體和訊息流量。例如,您可以指定允許用於目標的產生器最大數目、目標中允許的最大訊息數量 (或大小),以及每個單一訊息的最大大小。

您也可以指定到達這類限制時,代理程式應採取的反應措施:減緩產生器、捨棄最舊的訊息、捨棄最不重要的訊息,或拒絕最新的訊息。

系統範圍訊息限制

您也可以使用特性,設定套用到代理程式上所有目標的限制:可以指定訊息總數和所有訊息使用的記憶體。如果達到整個系統的任何訊息限制,代理程式就會拒絕新的訊息。

系統記憶體執行緒

最後,可以使用特性來設定臨界值,當到達臨界值時,代理程式會採取越來越嚴格的動作,以防止記憶體超過負載。此動作取決於記憶體資源的狀態:green (大量記憶體可用)、yellow (代理程式記憶體正在減少)、orange (代理程式記憶體不足),以及 red (代理程式無記憶體可用)。如果代理程式記憶體的狀態從 green 變為 red,代理程式會採取越來越嚴格的動作:

永久性服務

如果代理程式要在失敗時回復,則此代理程式需要重新建立其訊息傳送作業的狀態。若要執行此操作,代理程式必須將狀態資訊儲存到資料存放區。重新啟動代理程式時,它會使用儲存的資料來重新建立目標和長期訂閱、回復永久性訊息、回復開啟的作業事件,並為未傳送的訊息重新建立路由表格。接著就可以重新繼續訊息傳送

Message Queue 服務支援檔案式永久性模組和 JDBC 相容的永久性模組 (請參閱圖 3–2),且預設使用檔案式永久性模組。

圖 3–2 永久性支援

圖表顯示代理程式對永久性訊息使用平面檔案存放區或 JDBC 相容資料存放區。

檔案式永久性

檔案式永久性機制使用個別檔案儲存永久性資料。如果您使用檔案式永久性,您可以設定代理程式特性執行下列作業:

檔案式永久性通常快於 JDBC 型永久性;但是某些使用者偏好 JDBC 相容存放區所提供的備援和管理控制功能。

JDBC 型永久性

JDBC 型永久性使用 Java 資料庫連結 (JDBCTM) 介面,將代理程式連線到 JDBC 相容的資料存放區。若要讓代理程式透過 JDBC 驅動程式存取資料存放區,您必須執行下列作業:

「Sun Java System Message Queue 3.7 UR1 管理指南」中的第 4 章「配置代理程式」,詳細介紹完成這些工作和相關配置特性的完整程序。

安全性服務

Message Queue 服務支援每個代理程式實例的認證和授權 (存取控制),也支援加密:

認證和授權取決於包含有關訊息傳送系統使用者資訊 (如使用者名稱、密碼和群組成員身份) 的儲存庫。此外,若要授權特定作業給使用者或群組,則代理程式必須檢查指定使用者或群組可執行作業的存取控制特性檔案 。您負責設定代理程式需要認證使用者和授權使用者動作的資訊。

圖 3–3 顯示代理程式提供認證與授權服務時所需的元件。

圖 3–3 安全性管理員支援

圖表顯示安全性管理員使用使用者儲存庫和存取控制特性檔案。圖以文字介紹。

圖 3–3 所示,您可以在 Message Queue 服務隨附的平面檔案使用者儲存庫中儲存 使用者資料,也可以外掛於預先存在的 LDAP 儲存庫中。您可以設定代理程式特性來表示您的選擇。

認證和授權

當用戶端請求連線時,該用戶端必須提供使用者名稱和密碼。代理程式會對指定名稱和密碼與儲存在使用者儲存庫中的名稱和密碼進行比較。將此密碼從用戶端傳送至代理程式時,系統會使用 Base64 編碼或訊息摘要 (MD5) 雜湊法,對密碼進行編碼。MD5 用於平面檔案儲存庫,LDAP 儲存庫則需要 Base64 編碼。如果使用 LDAP,可能會需要使用安全 TLS 協定。您可以設定代理程式特性以分別配置每種連線服務所使用的編碼類型,或在代理程式範圍基礎上設定編碼。

當使用者嘗試執行作業時,代理程式會檢查使用者名稱和群組成員身份 (從使用者儲存庫),是否與為存取此作業所指定 (在存取控制特性檔案中) 的名稱和成員身份相符。存取控制特性檔案可指定以下作業的授權給使用者或群組:

設定代理程式特性,以指定下列資訊:

加密

若要加密在用戶端與代理程式之間傳送的訊息,您需要使用基於安全傳輸層 (SSL) 標準的連線服務。透過在已啟用 SSL 的代理程式與已啟用 SSL 的用戶端之間建立已加密連接,SSL 可提供連接級別的安全性。

您可以設定代理程式特性,以指定要使用的 SSL 金鑰庫安全性特性,以及密碼檔案的名稱和位置。

監視服務

代理程式包含可監視和診斷應用程式和代理程式效能的元件。這些元件包括:

圖 3–4 說明一般方案。

圖 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 顯示除用戶端連線以外的訊息服務檢視,並著重在代理程式元件和用以管理這些元件的工具。

圖 3–5 管理工具

圖中顯示管理員用以控制不同訊息佇列服務元件的不同工具。圖以文字介紹。

您可以使用下列指令行工具,配置及管理 Message Queue 服務。

GUI 型管理主控台結合 imqcmdimqobjmgr 公用程式的部分功能。您可以用於執行下列作業:

支援開發環境

開發用戶端元件時,最好保持最低的管理工作量。Message Queue 產品是專為協助您執行此作業所設計,從包裝盒中取出即可使用。只需啟動代理程式即可。下列作業會讓您專注在開發工作上:

支援生產環境

在生產環境中,訊息服務管理在應用程式效能和滿足企業延展性、可用性和安全性需求上,發揮關鍵作用。在此環境中,管理員還要執行多項工作。這些工作大致上可分為設定與維護作業。

設定作業

一般必須執行下列設定作業:

維護作業

若要監視和控制代理程式資源,以及調校應用程式效能,必須在部署應用程式之後,執行下列作業:

延展訊息傳送作業

Message Queue 服務可以連線多個代理程式並允許其共用資訊,來進行水平延展。這可讓任一代理程式存取遠端目標,並為大量用戶端提供服務。如需更多資訊,請參閱第 4 章, 代理程式叢集