![]() | |
Sun Java System Message Queue 3 2005Q1 管理指南 |
第 4 章
配置代理程式代理程式實例啟動時,它的配置由一組配置檔案和傳給 imqbrokerd 指令的選項來管理。本章說明配置檔案和指令行選項如何互動配置代理程式實例、描述每個代理程式元件的功能及列出其配置特性,並解釋如何設定配置。
本章包含以下各節:
如需配置特性的完整參照資訊,請參閱第 14 章「代理程式特性參照」。
關於可配置的代理程式元件Message Queue 訊息傳送系統中的訊息傳送 - 從生產型用戶端至目標,然後從目標至一個或多個使用用戶端 - 由代理程式或以串聯方式工作的代理程式實例叢集執行。
若要執行訊息傳送,代理程式必須設定與用戶端通訊的通道、執行認證與授權、適當路由訊息、確保可靠傳送,並為監視系統效能提供資料。
若要執行其功能,代理程式將使用一些內部元件,並且每個元件在遞送過程中都有特定的角色。圖 4-1 中說明了這些代理程式元件。
圖 4-1 代理程式服務元件
訊息路由器元件執行主要的訊息路由和傳送服務,其他元件則提供重要的支援服務。表 4-1 中簡單描述每個元件。
根據載入條件、應用程式的複雜性等,您可以配置這些元件,最佳化代理程式的效能。下面幾節介紹每個元件所執行的功能和您可以設定來影響元件運作方式的特性。
連線服務
Message Queue 代理程式支援與 Message Queue 應用程式用戶端和 Message Queue 管理用戶端的通訊。每種連線服務均由其服務類型和協定類型指定如下:
表 4-2 列出 Message Queue 代理程式可以使用的連線服務:
您可以將代理程式配置為執行這些連線服務的任何一種或全部。每種連線服務可用於特定的連接埠,此連接埠由代理程式的主機名稱和連接埠號指定。依預設,會啟用 jms 和 admin 服務。
Message Queue 可以將連線服務動態對映到連接埠號,或者您可以明確的指派連接埠。每種服務皆使用共用連接埠對映器登錄,但它們均有自己的執行緒池管理程式,如圖 4-2 所示。
圖 4-2 連線服務支援
下面幾節描述連接埠對映器和執行緒池管理程式之間的關係。
連接埠對映器
Message Queue 會提供一個連接埠對映器,以指定連線服務的連接埠。連接埠對映器常駐在標準的連接埠號 7676。當用戶端設定與代理程式連線時,它先聯絡連接埠對映器,要求提供所指定的連線服務的連接埠號。
jms、ssljms、admin 和 ssladmin 連線服務的可以是動態或靜態。依預設,連線服務啟動時,會動態配置其連接埠。或者,您可以為服務指定靜態連接埠,但通常不建議靜態連接埠號。靜態連接埠號通常只用於連線遍訪防火牆等特殊狀況。
使用附錄 C「HTTP/HTTPS 支援」的表 C-1 和表 C-3 中描述的特性,可分別配置 httpjms 和 httpsjms 服務。
執行緒池管理程式
每種連線服務均為多重執行緒,支援多重連線。這些連線所需的執行緒,在執行緒池管理程式元件所管理的執行緒池中維護。
您可以配置此執行緒池管理程式,以設定此執行緒池中所維護的執行緒的最小數目和最大數目。由於連線需要執行緒,因此可將執行緒新增至執行緒池。當執行緒超過最小數目時,系統將關閉執行緒 (因為這些執行緒將成為自由執行緒,直至達到最小數目的臨界值),從而節省記憶體資源。此數目必須夠大,才不必繼續建立新的執行緒。在大量連線負載下,執行緒的數目會增加,直至達到執行緒池的最大數目,然後連線必須等待,直至某執行緒變為可用。
執行緒池中的執行緒可專屬於單一連線 (專屬模型),或依需要指定給多重連線 (共用模型)。
專屬模型 每個到代理程式的連線均要求兩個專屬執行緒:一個處理連線內送的訊息,另一個處理連線外寄的訊息。這可將連線數目限制為執行緒池中最大執行緒數目的一半,但它可提供高效能。
共用模型 (Enterprise Edition) 傳送或接收訊息時,共用執行緒會負責處理連線。因為每個連線皆沒有要求專屬執行緒,所以此模型會增加連線服務 (和代理程式) 可支援的連線數目。但也會增加共用執行緒中效能耗用的時間。執行緒池管理程式使用一套分散執行緒,可監視連線狀態並依需要將連線指定給執行緒。透過限制每個此類分散執行緒監視的連線數目,在此活動中效能耗用的時間可以縮到最短。
安全性
每種連線服務可支援特定認證和授權 (存取控制) 功能 (請參閱安全性管理程式)。
連線服務特性
這些是連線服務相關的可配置特性:
- imq.service.activelist。代理程式啟動時啟動的連線服務清單。
- imq.hostname。如果有多台主機可用 (例如,如果一台電腦中有多張網路介面卡),則指定所有連線服務所連結的主機。
- imq.portmapper.port。指定代理程式的主要連接埠 - 連接埠對映器常駐的連接埠。
- imq.portmapper.hostname。如果有多個可用主機,指定連接埠對映器連結到的主機。
- imq.portmapper.backlog。指定拒絕請求前,連接埠對映器可以處理運作請求的最大數目。 此特性可以設定請求數目,這些請求可儲存在作業系統儲存區,等待連接埠對映器進行處理。
- imq.service_name.protocol_type.port.僅適用於 jms、ssljms、admin 和 ssladmin 服務,為已命名的連線服務指定連接埠號。
- imq.service_name.protocol_type.hostname。僅適用於 jms、ssljms、admin 和 ssladmin 服務,有多個可用主機時,指定已命名的連線服務連結到的主機。
- imq.service_name.min_threads。指定執行緒數目,一旦達到指定數目,執行緒便會在執行緒池中維護,供已命名的連線服務使用。
- imq.service_name. max_threads。指定執行緒數目,一旦超過指定數目,系統便不會將新的執行緒新增至執行緒池,供已命名的連線服務使用。
- imq.service_name.threadpool_model。指定當命名的連線服務有需要時,執行緒是專屬於連線或是由連線共用。
- imq.shared.connectionMonitor_limit。僅適用於共用執行緒池模型,指定可由分散執行緒監視的最大連線數目。
如需這些特性的完整說明,請參閱表 14-2。
訊息路由器
一旦使用支援的連線服務在用戶端和代理程式之間建立了連線,則可進行訊息路由與傳送。
基本的傳送機制
概括地講,代理程式所處理的訊息分為兩類:
如果內送的訊息為 JMS 訊息,則代理程式將基於此訊息的目標是佇列或主題,將其路由至使用者用戶端:
一旦訊息路由器將訊息傳送至所有預定的用戶,它便會將此訊息從記憶體中清除。如果此訊息為永久性的,訊息路由器會將其從代理程式的永久性資料儲存中移除。
可靠傳送:確認和作業事件
當為可靠傳送新增需求時,剛才描述的傳送機制會變得更加複雜。可靠傳送包含兩個方面:
為確保訊息成功遞送至代理程式及從其中成功發出,Message Queue 使用了一些回應控制訊息。
例如,生產者向目標傳送 JMS 訊息 (有效負載訊息) 時,代理程式會回應已經收到 JMS 訊息。(依預設,僅當產生者指定 JMS 訊息為永久性時,Message Queue 才會執行此作業)。生產型用戶端使用代理程式回應,以確保傳送至目標。
同樣,當代理程式將 JMS 訊息傳送至用戶時,此使用用戶端會傳送回它已接收到並已處理此訊息的確認。建立階段作業物件時,用戶端會指定如何自動或頻繁地傳送這些確認,但如果訊息路由器沒有從它已向其遞送訊息的每個訊息使用者 (例如,從主題的多重用戶的每個用戶) 接收到確認,則它不會從記憶體中刪除 JMS 訊息。
如果主題有多個長期訂閱,則訊息路由器會將每個 JMS 訊息保留在目標中,並當每個長期用戶成為使用中用戶時傳送此訊息。
訊息路由器接收用戶端確認時會記錄這些確認,並僅在已接收所有確認後才刪除 JMS 訊息,除非 JMS 訊息在此之前已過期。
而且,透過將代理程式確認傳送回用戶端,訊息路由器確認用戶端確認的接收。使用用戶端使用代理程式回應,以確保代理程式不會多次傳送同一 JMS 訊息。如果代理程式無法接收到用戶端確認,則可能發生上述情況。
如果代理程式沒有接收到用戶端確認並再次傳送 JMS 訊息,則此訊息會標記有重新傳送旗標。在下列情況下,代理程式通常會重新傳送 JMS 訊息:
例如,如果佇列的訊息用戶在確認訊息之前離線,而且另一個用戶隨後註冊此佇列,則代理程式將未確認的訊息重新傳送至此新的用戶。
以上描述的用戶端確認與代理程式回應,還套用於群組至作業事件中的 JMS 訊息傳送。在這些情況下,這些過程可對作業事件作業,亦可對傳送或接收的個別 JMS 訊息作業。確定作業事件時,代理程式回應會被自動傳送。
代理程式會追蹤作業事件,並可對作業事件進行確定或在發生故障時回轉。本作業事件管理還支援本機作業事件,此為較大型分散式作業事件的一部分。代理程式會追蹤這些作業事件的狀態,直至它們被確定。代理程式啟動時,它會檢查所有未確定的作業事件,並依預設回轉所有作業事件 (那些處於 PREPARED 狀態的作業事件除外)。如果您有設定 imq.transaction.autorollback 特性,代理程式還會回轉處於 PREPARED 狀態的作業事件。
可靠傳送:持續性
可靠傳送的另一個方面是,確保實際傳送訊息之前,代理程式不會遺失訊息或傳送資訊。一般來說,訊息會保留在記憶體中,直至它們已被傳送或過期。但是,如果代理程式出現故障,則這些訊息會遺失。
如果生產者用戶端指定訊息為永久性的,訊息路由器會將此訊息傳送至持續性管理程式。持續性管理程式會將訊息儲存在資料庫或檔案系統 (請參閱持續性管理程式) 以便在代理程式出現故障時回復此訊息。
管理記憶體資源和訊息流量
代理程式的效能和穩定性取決於可用的系統資源,以及如何有效利用記憶體之類的資源。要特別注意的是,訊息產生速度快於使用速度時,會使用到所有的記憶體資源,因而訊息路由器可能過度負載。若要預防發生此情形,訊息路由器會使用三個記憶體保護級別,以在資源不足時維持系統作業:
個別目標上的訊息限制 您可以設定實體目標特性,以指定訊息數目限制和訊息使用的總記憶體限制 (請參閱第 15 章「實體目標特性參照」)。您也可以指定訊息路由器到達這些限制時的運作方式。四個限制運作方式為:
系統範圍訊息限制 系統範圍訊息限制為第二道保護。您可以指定套用於系統上之所有目標的系統範圍限制:訊息總數目和所有訊息使用的記憶體 (請參閱表 14-3)。如果到達任何系統範圍訊息限制,訊息路由器會拒絕新的訊息。
系統記憶體臨界值 系統記憶體臨界值為第三道保護。您可以指定代理程式採取越來越重要的動作時可用的系統記憶體臨界值,以防止記憶體超過負載。此動作取決於記憶體資源的下列狀態:
在代理程式的記憶體狀態從綠色變為黃色和橙色,然後變為紅色的過程中,代理程式會採取越來越重要的動作,動作類型如下所示:
- 將訊息移出使用中記憶體並放入永久性儲存體 (請參閱持續性管理程式)。
- 減低非永久性訊息的產生者,最終使訊息停止流入代理程式。永久性訊息流量會自動受到代理程式確認每個訊息之要求的限制。
上述兩種方法皆會降低效能。
如果到達系統記憶體臨界值,那表示目標訊息限制和系統範圍訊息限制太小。在某些情況下,臨界值無法及時擷取潛在的記憶體負載。因此,您不應依賴此功能來控制記憶體資源,而是應個別且整體地配置目標,以最佳化記憶體資源。
訊息路由器特性
這些是管理記憶體資源的系統範圍限制和系統記憶體臨界值:
- imq.destination.DMQ.truncateBody。指定停用的訊息佇列只包含訊息的標頭和特性資料。捨棄訊息內文的內容。
- imq.message.expiration.interval。指定回收已過期訊息發生的頻率 (以秒為單位)。
- imq.system.max_count。指定代理程式保留訊息的最大數目。
- imq.system.max_size。指定代理程式保留的最大訊息總量。
- imq.message.max_size。指定訊息內文的最大值。
- imq.resource_state.threshold。指定啟動每種記憶體狀態時的記憶體利用百分比。
- imq.resource_state.count。指定在啟動每個記憶體資源狀態時,批次中允許內送訊息的最大數目。
- imq.transaction.autorollback。指定處於 PREPARED 狀態的分散式作業事件是否可在啟動代理程式時自動回轉。
如需這些特性的完整說明,請參閱表 14-3。
持續性管理程式
若要回復代理程式 (萬一代理程式發生故障),則此代理程式需要重新建立其訊息傳送作業的狀態。此操作要求它將所有永久性訊息以及基本的路由與傳送資訊儲存至資料儲存。持續性管理程式元件管理此資訊的寫入和擷取。
若要回復發生故障的代理程式,不僅只要復原未傳送的訊息。代理程式還必須可執行以下作業:
持續性管理程式管理所有此狀態資訊的儲存和擷取。
重新啟動代理程式時,它會重新建立目標和長期訂閱、回復永久性訊息、復原所有作業事件的狀態,並為未傳送訊息重新建立其路由表格。然後,它可以繼續訊息傳送。
Message Queue 支援內建和外掛持續性模組 (請參閱圖 4-3)。內建持續性是基於檔案的資料儲存。外掛持續性使用 Java 資料庫連結 (JDBC) 介面,並需要 JDBC 資料儲存。內建持續性通常快於外掛持續性;但是某些使用者更喜歡使用了 JDBC 相容資料庫系統的容錯和管理功能。
圖 4-3 持續性管理程式支援
內建持續性
預設 Message Queue 永久性儲存體解決方案為基於檔案的資料儲存。這種方法使用個別檔案儲存永久性資料,如訊息、目標、長期訂閱以及作業事件。
基於檔案的資料儲存位於以代理程式實例 (instanceName) 作為辨別依據的目錄中,且代理程式實例與資料儲存相互關聯 (請參閱附錄 A「Message Queue 資料的作業系統特定位置」):
…/instances/instanceName/fs350/
建立基於檔案的資料儲存,以便根據永久性訊息於目標的常駐位置,將永久性訊息儲存在目錄中。大部分訊息會儲存在由智慧型記錄所組成的單一檔案中。
若要減少因新增和移除訊息而產生的分段程序,您可以壓縮智慧型記錄檔案 (請參閱壓縮實體目標)。除此之外,內建的持續性管理程式會將大小超過可配置臨界值的訊息 (imq.persist.file.message.max_record_size) 儲存在其個別檔案中,而非儲存於智慧型記錄檔案。針對這些個別檔案,要維護檔案池,以便檔案被重新使用。當不再需要訊息檔案時,系統不會刪除它,而是將它加入目標目錄中的可用檔案池中,用來儲存新的訊息。
您可以在目標檔案池中配置檔案的最大數目 (imq.persist.file.destination.message.filepool.limit)。您還可以指定此檔案池中被截斷至零而清除,而不是僅標記為重新使用的可用檔案的百分比 (imq.persist.file.message.filepool.cleanratio)。清除檔案的百分比越高,磁碟空間就越少,維護此檔案池所需的耗用時間就越多。
您可以指定是否要在關機時清除已標記檔案 (imq.persist.file.message.cleanup)。如果這些檔案被清除,則它們將佔用很少的磁碟空間,但關閉代理程式則需較長時間。
所有其他永久性資料 (目標、長期訂閱和作業事件) 皆儲存在個別檔案中。所有目標在一個檔案中,所有長期訂閱在另一個檔案中,以此類推。
若要最大化可靠性,您可以使用 imq.persist.file.sync.enabled 屬性,指定持續性作業應該讓實體儲存裝置與內部記憶體狀態同步。這可以消除因系統當機而產生的資料遺失,但會影響效能。如果您在 Sun Cluster 環境中執行 Message Queue,必須將叢集中所有節點的此屬性設定為 true。
因為資料儲存可以包含敏感或專用性質的訊息,所以您應該保護 instances/instanceName/fs350/ 目錄,以防未經授權的存取。如需說明,請參閱保護永久性資料。
外掛持續性
您可以設定代理程式,以透過 JDBC 驅動程式存取任何可存取的資料儲存。這包含設定一些與 JDBC 相關的代理程式配置特性,以及使用資料庫管理員公用程式 (imqdbmgr) 來建立具有適當模式的資料儲存。設定永久性儲存中詳細介紹了這些程序和相關的配置特性。
持續性管理程式特性
這個特性指定您使用的持續性類型:
這些特性屬於內建持續性:
- imq.persist.file.sync.enabled。指定持續性作業是否與實體儲存裝置以記憶體狀態同步化。
- imq.persist.file.message.max_record_size。指定訊息新增到訊息儲存檔案的最大容量。
- imq.persist.file.destination.message.filepool.limit。指定目標檔案池中,可供重新使用之可用檔案的最大數目。
- imq.persist.file.message. filepool.cleanratio。指定目標檔案池中被維護處於清除狀態之可用檔案的百分比 (截斷至零)。
- imq.persist.file.message.cleanup。指定代理程式關閉時,是否會清除目標檔案池中的可用檔案。
如需這些特性的完整說明,請參閱表 14-6。
這些特性屬於基於 JDBC 的持續性:
- imq.persist.jdbc.brokerid。指定代理程式實例識別碼,以附加至資料庫中多個代理程式實例使用的表格名稱。
- imq.persist.jdbc.driver。指定 JDBC 驅動程式的 Java 類別名稱,以連線至資料庫。
- imq.persist.jdbc.opendburl。指定資料庫 URL,以開啟與現有資料庫的連線。
- imq.persist.jdbc.createdburl。指定資料庫 URL,以開啟連線建立資料庫。
- imq.persist.jdbc.closedburl。指定資料庫 URL,以在關閉代理程式時關閉目前資料庫連線。
- imq.persist.jdbc.user。如有必要,則指定用於開啟資料庫連線的使用者名稱。
- imq.persist.jdbc.needpassword。指定資料庫是否需要密碼以存取代理程式。
- imq.persist.jdbc.password。如有必要,則指定用於開啟資料庫連線的密碼。
- imq.persist.jdbc.table.IMQSV35。用來建立版本表格的 SQL 指令。
- imq.persist.jdbc.table.IMQCCREC35。用來建立配置變更記錄表格的 SQL 指令。
- imq.persist.jdbc.table.IMQDEST35。用來建立目標表格的 SQL 指令。
- imq.persist.jdbc.table.IMQINT35。用來建立偏好表格的 SQL 指令。
- imq.persist.jdbc.table.IMQMSG35。用來建立訊息表格的 SQL 指令。
- imq.persist.jdbc.table.IMQPROPS35。用來建立特性表格的 SQL 指令。
- imq.persist.jdbc.table.IMQILIST35。用來建立狀態表格的 SQL 指令。
- imq.persist.jdbc.table.IMQTXN35。用來建立作業事件表格的 SQL 指令。
- imq.persist.jdbc.table.IMQTACK35。用來建立作業事件確認表格的 SQL 指令。
如需這些特性的完整說明,請參閱表 14-7。
安全性管理程式
Message Queue 提供認證與授權 (存取控制) 功能,還支援加密功能。
認證與授權功能因使用者儲存庫而異 (請參閱圖 4-4):包含有關訊息傳送系統使用者的資訊 (如使用者名稱、密碼和群組成員身份) 的檔案、目錄或資料庫。當請求與代理程式連線時,這些名稱和密碼用於認證使用者。使用者名稱和群組成員身份,連同存取控制檔案一起用於授權作業 (如針對目標生產或使用訊息)。
Message Queue 管理員可寫入 Message Queue 所提供的使用者儲存庫 (請參閱使用文字檔案使用者儲存庫),或將預先存在的 LDAP 使用者儲存庫插入安全性管理程式元件中 (請參閱將 LDAP 伺服器用於使用者儲存庫)。
認證
Message Queue 安全性支援基於密碼的認證。當用戶端請求連線至代理程式時,它必須提交使用者名稱和密碼。
安全性管理程式將此用戶端提交的名稱和密碼與儲存在使用者儲存庫中的名稱和密碼進行比較。將此密碼從用戶端傳送至代理程式時,系統會使用基本 64 編碼或訊息摘要 (MD5) 對密碼進行編碼。如需更加安全的傳送,請參閱加密。您可以分別配置每種連線服務所使用的編碼類型,或在代理程式範圍基礎上設定編碼。
所有安全性管理程式特性都在安全性管理程式特性中列出,並在安全性管理程式特性中詳細描述。
授權
一旦認證用戶端應用程式的使用者,此使用者便可被授權執行各種與 Message Queue 相關的作業。安全性管理程式支援基於使用者和基於群組的存取控制。根據使用者儲存庫中的使用者名稱或指定給此使用者的群組,此使用者可擁有執行某些 Message Queue 作業的許可權。您可在存取控制特性檔案 (請參閱圖 4-4) 中指定這些存取控制。
當使用者嘗試執行作業時,安全性管理程式會從使用者儲存庫檢查使用者名稱和群組成員身份,是否與存取控制特性檔案中指定存取此作業的名稱和成員身份相符。存取控制特性檔案可指定以下作業的許可權:
預設存取控制特性檔案僅明確參照一個群組:admin (請參閱群組)。admin 群組中的使用者擁有管理服務連線許可權。管理服務可讓使用者執行管理功能,如建立目標以及監視與控制代理程式。依預設,您定義的任何其他群組中的使用者均無法取得管理服務連線。
作為 Message Queue 管理員,您可以定義群組,並將使用者與使用者儲存庫中的那些群組相關聯 (儘管群組在文字檔案使用者儲存庫中不能完全得到支援)。
透過編輯存取控制特性檔案,您可以指定使用者和群組對目標的存取權,以用於生產和使用訊息,或在佇列目標中瀏覽訊息。您可以使個別目標或所有目標僅可由特定使用者或群組進行存取。如果代理程式已配置為允許自動建立目標,則您可以透過編輯存取控制特性檔案來控制代理程式可為哪些使用者和群組自動建立目標。
所有安全性管理程式特性都在安全性管理程式特性中列出,並在安全性管理程式特性中詳細描述。
加密
若要加密在用戶端與代理程式之間傳送的訊息,您需要使用基於安全套接層 (SSL) 標準的連線服務。透過在已啟用 SSL 的代理程式與已啟用 SSL 的用戶端之間建立已加密連線,SSL 可提供連線級別的安全性。
若要使用 Message Queue 基於 SSL 的連線服務,您將使用鍵值工具公用程式 (imqkeytool) 產生私密密鑰/公開密鑰對。此公用程式將公開密鑰內嵌在自身簽名的憑證中,並放置在 Message Queue 密鑰儲存區中。Message Queue 密鑰儲存區自身具有密碼保護;若要對其解除鎖定,您必須在啟動時提供密鑰儲存區密碼。請參閱使用基於 SSL 的服務。
一旦密鑰儲存區解除鎖定,則代理程式可將憑證傳送至請求連線的任何用戶端。然後,用戶端使用此憑證設定與代理程式的已加密連線。
所有安全性管理程式特性都在下一節中列出,並在安全性管理程式特性中詳細描述。
安全性管理程式特性
這些特性是用於認證、授權、加密以及其他安全通訊的可配置特性:
- imq.authentication.type。指定密碼應以基本 64 程式碼 (basic) 傳送,或作為 MD5 摘要 (digest) 傳送。
- imq.service_name. authentication.type。指定密碼應以基本 64 程式碼 (basic) 傳送,或作為 MD5 摘要 (digest) 傳送。
- imq.authentication.basic.user_repository。指定基本 64 程式碼認證用的使用者儲存庫類型 (基於檔案或 LDAP)。
- imq.authentication.client.response.timeout。指定系統等待用戶端回應來自代理程式的認證請求的時間 (以秒為單位)。
- imq.accesscontrol.enabled。表示系統是否將檢查已認證的使用者擁有使用連線服務的許可權,或擁有執行與特定目標相關的特定 Message Queue 作業的許可權 (如存取控制特性檔案中所指定)。
- imq.service_name.accesscontrol.enabled。為已命名的連線服務設定存取控制 (true/false),並覆寫代理程式範圍的設定。
- imq.accesscontrol.file.filename。為代理程式實例支援的所有連線服務,指定存取控制特性檔案的名稱。
- imq.service_name.accesscontrol.file.filename。為代理程式實例的已命名連線服務,指定存取控制特性檔案的名稱。
- imq.passfile.enabled。指定是否已在檔案中指定用於安全通訊的使用者密碼 (用於 SSL、LDAP、JDBC)。
- imq.passfile.dirpath。指定包含密碼檔案之目錄的路徑。
- imq.passfile.name。指定密碼檔案的名稱。
- imq.keystore.property_name。用於基於 SSL 的服務:指定與 SSL 密鑰儲存相關的安全性特性。請參閱表 14-9。
如需這些特性的完整說明,請參閱表 14-8。
監視服務
代理程式包括一些用於監視和診斷其作業的元件。這些元件如下:
- 產生資料的元件 (記錄事件與度量產生器的代理程式程式碼)
- 記錄程式元件 (請參閱記錄程式),可透過一些輸出通道寫出資訊
- 訊息產生器,可將包含度量資訊的 JMS 訊息傳送到 JMS 監視用戶端使用的主題目標。
圖 4-5 中說明了一般方案。
圖 4-5 監視服務支援
度量產生器
度量產生器提供代理程式活動的相關資訊,例如流入和流出代理程式的訊息流量、代理程式記憶體中的訊息數目和使用的記憶體、開啟連線的數目,以及使用的執行緒數目。
您可以開啟或關閉度量資料的產生,並指定產生度量報告的頻率。
記錄程式
Message Queue 記錄程式會取得代理程式程式碼產生的資訊和度量產生器,並將資訊寫入一些輸出通道:標準輸出 (主控台)、記錄檔及 Solaris 作業系統上的 syslog 常駐程式。
您可以指定記錄程式收集的資訊類型,以及寫入每個輸出通道的類型。
例如,您可以指定記錄程式級別,判定記錄程式收集的資訊類型:錯誤 (ERROR)、錯誤和警告 (WARNING),或錯誤、警告和資訊 (INFO)。
對於每個輸出通道,您均可以指定為記錄程式設定的哪些種類將寫入至此通道。例如,如果記錄程式級別設定為 INFO,則可以指定您僅將錯誤和警告寫入至主控台,以及僅將資訊 (標準資訊資料) 寫入至記錄檔。
如果您使用記錄檔,您可以指定何時關閉記錄檔並將輸出自動重建至新檔案。當建立新的自動重建記錄檔時,將會保留 9 個最新記錄檔的歸檔檔案。
如需配置記錄程式的相關資訊,請參閱配置及使用代理程式記錄功能。如需有關配置和使用 Solaris syslog 的資訊,請參閱 syslog(1M)、syslog.conf(4) 和 syslog(3C) 線上手冊。
度量資訊產生者 (Enterprise Edition)
訊息產生者元件會在固定時間間隔,從度量產生器元件收到資訊。然後將資訊寫入訊息,再將訊息傳送到一些度量主題目標。度量訊息的傳送目標,視訊息中包含的資訊類型而定。
總共有 5 個度量主題目標。表 4-3 中顯示了這些目標的名稱,和傳送到每個目標的度量訊息類型。
訂閱這些度量主題目標的 Message Queue 用戶端,會使用目標中的訊息並處理度量資訊。例如,用戶端可以指定到 mq.metrics.broker 目標,以接收和處理像代理程式中訊息總數目的這類資訊。
度量訊息產生者為可建立訊息 (MapMessage 類型,包含與度量資料對應的名稱值對) 的內部 Message Queue 用戶端。只有在有一個或多個對應度量主題目標的用戶時,才會產生這些訊息。
度量訊息產生者產生的訊息類型為 MapMessage。它們是根據訊息包含的度量類型,由一些名稱/值對而組成。每個名稱/值對會對應到一個度量數目和度量數目的值。
代理程式度量訊息包含一些訊息數目值,例如,流入和流出代理程式的訊息數目、這些訊息的大小,以及目前記憶體中的訊息數目和大小等。如需每個度量訊息類型中報告度量數目詳細資訊,請參閱 Message Queue Developer’s Guide for Java Clients。手冊中解釋如何寫入使用度量訊息的 Message Queue 用戶端。
除了包含於度量訊息主體的度量資訊外,每個訊息標頭還有提供下列資訊的特性:
這些特性對處理不同類型或不同代理程式的度量訊息的 Message Queue 用戶端應用程式十分有用。
監視服務特性
這些特性是可配置特性,代理程式可以使用他們設定資訊的產生、記錄和度量訊息產生等資訊。
- imq.metrics.enabled。指定是否要將度量資訊寫入記錄程式。
- imq.metrics.interval。如果已啟用度量記錄,則請指定將度量資訊寫入記錄程式的時間間隔 (以秒為單位)。
- imq.log.level。指定記錄程式級別:可寫入至輸出通道的輸出種類。
- imq.log.file.output。指定寫入至記錄檔的記錄資訊的種類。
- imq.log.file.dirpath。指定包含記錄檔之目錄的路徑。
- imq.log.file.filename。指定記錄檔的名稱。
- imq.log.file.rolloverbytes。指定記錄檔輸出自動重建至新記錄檔時,此記錄檔的容量 (以位元組為單位)。
- imq.log.file.rolloversecs。指定記錄檔輸出自動重建至新記錄檔時,此記錄檔的存在時間 (以秒為單位)。
- imq.log.console.output。指定寫入至主控台的記錄資訊的種類。
- imq.log.console.stream。指定主控台輸出寫入至 stdout (OUT),或寫入至 stderr (ERR)。
- imq.log.syslog.facility。(僅適用於 Solaris) 指定 Message Queue 代理程式應記錄為的 syslog 設備。
- imq.log.syslog.logpid。(僅適用於 Solaris) 指定是否同時記錄訊息與代理程式程序 ID。
- imq.log.syslog.logconsole。(僅適用於 Solaris) 指定如果訊息無法傳送至 syslog,是否將它們寫入至系統主控台。
- imq.log.syslog.identity。(僅適用於 Solaris) 指定應前置於每個訊息的身份字串是否記錄至 syslog。
- imq.log.syslog.output。(僅適用於 Solaris) 指定寫入至 syslogd(1M) 的記錄資訊的種類。
- imq.log.timezone。指定記錄時間戳記的時區。
- imq.metrics.topic.enabled。指定是否啟用度量訊息產生功能。
- imq.metrics.topic.interval。指定產生度量訊息的時間間隔 (以秒為單位)。
- imq.metrics.topic.persist。指定度量訊息是否為永久性訊息。
- imq.metrics.topic.timetolive。指定傳送到度量主題目標之度量訊息的有效期 (以秒為單位)
- imq.destination.logDeadMsgs。指定每次代理程式捨棄停用的訊息或是將停用的訊息放入停用訊息佇列中時,是否在記錄檔中寫入訊息。
如需這些特性的完整參照資訊,請參閱表 14-10。
關於配置檔案代理程式配置檔案可用來配置代理程式。附錄 A「Message Queue 資料的作業系統特定位置」列出作業系統的這些檔案所在的目錄。
此目錄儲存以下檔案:
實例配置檔案
您首次執行代理程式時,會建立實例配置檔案。您可以使用實例配置檔案來指定代理程式實例的配置特性。
實例配置檔案儲存於以代理程式實例名稱 (instanceName) 作為辨別依據的目錄中,且代理程式實例與配置檔案相互關聯:
.../instances/instanceName/props/config.properties
有關 instances 目錄的位置,請參閱附錄 A「Message Queue 資料的作業系統特定位置」。
代理程式實例會維護實例配置檔案。當您使用管理工具變更配置時,即會修改實例配置檔案。您也可以以手動方式編輯實例配置檔案來變更配置 (請參閱編輯實例配置檔案)。若要執行此動作,您必須為.../instances/instanceName 目錄的擁有者,或以超級使用者身份登入,才可變更目錄上的權限。
如果您連線叢集中的代理程式實例,您可能還需要使用叢集配置檔案以指定叢集配置資訊。如需更多資訊,請參閱叢集配置特性。
合併特性值
啟動時,代理程式會合併不同配置檔案中的特性值。它使用在安裝和實例配置檔案中的值,覆寫在預設配置檔案中指定的值。
您可以透過使用 imqbrokerd 指令選項覆寫結果值。此方案在圖 4-6 中有說明。
圖 4-6 代理程式配置檔案
特性命名語法
配置檔案中的任何 Message Queue 特性定義均使用以下命名語法:
propertyName=value[[,value1]…]
例如,以下項目指定拒絕其他訊息前,代理程式會在記憶體和永久性儲存中攔截 50,000 個訊息。
imq.system.max_count=50000
下列項目指定每天 (86400 秒) 會建立一個新的記錄檔:
imq.log.file.rolloversecs=86400
第 14 章「代理程式特性參照」列出代理程式配置特性及其預設值。
編輯實例配置檔案首次執行代理程式實例時,會自動建立 config.properties 檔案。您可以編輯此實例配置檔案,以自訂相應代理程式實例的運作方式和資源使用。
代理程式實例僅在啟動時讀取 config.properties 檔案。若要永久性變更 config.properties 檔案,您可以執行以下作業之一:
- 使用管理工具。如需有關可使用 imqcmd 設定之特性的資訊,請參閱表 14-1。
- 當代理程式實例關閉時編輯 config.properties 檔案;然後重新啟動此實例。(在 Solaris 和 Linux 作業系統上,僅首次啟動此代理程式實例的使用者有權編輯 config.properties 檔案)。
表 14-1 以字母順序列出代理程式實例配置特性及其預設值。如需有關每種特性的涵義和使用的更多資訊,請參閱指定的交叉參照部分。
在指令行上輸入配置選項您可以在啟動代理程式時或啟動之後,在指令行上輸入代理程式配置選項。
啟動時,您可以使用 imqbrokerd 指令來啟動代理程式實例。指令的 -D 選項,可用來指定任何代理程式特性及其值。如果您使用 imqsvcadmin 指令將代理程式啟動為 Windows 服務,則 -args 選項可用來指定啟動配置特性。
執行代理程式實例時,您也可以設定一些代理程式特性。若要修改執行中代理程式的配置,您可以使用 imqcmd update bkr 指令。
如需啟動配置的詳細資訊,請參閱第 3 章「啟動代理程式和用戶端」,尤其是以互動方式啟動代理程式中的範例。
如需修改執行中代理程式的配置的詳細資訊,請參閱第 5 章「管理代理程式」和第 14 章「代理程式特性參照」。
設定永久性儲存Message Queue 代理程式包括持續性管理程式元件,可管理永久性資訊的寫入與擷取。依預設,此持續性管理程式已配置,可存取內建、基於檔案的資料儲存,但是您可以重新配置它,以便透過 JDBC 相容的驅動程式插入任何可存取的資料儲存。
Message Queue 資料儲存包含作業事件、訊息、長期訂閱和實體目標的相關資訊。此外還包含確認的訊息狀態資訊。
本章解釋如何設定代理程式使用永久性儲存。它包括以下主題:
配置檔案系統儲存
您建立代理程式實例時,會自動建立檔案系統資料儲存。儲存在代理程式實例目錄中。這是作業系統特有的位置。有關永久性儲存的實際位置,請參閱附錄 A「Message Queue 資料的作業系統特定位置」。
依預設,Message Queue 會非同步寫入至磁碟。作業系統可以緩衝這些作業以提供更好的效能。但是,如果寫入作業期間發生意外的系統失敗,則訊息可能會遺失。若要改進可靠性,您可以讓 Message Queue 同步寫入磁碟,但請注意這個選項會降低效能。若要同步寫入磁碟,請設定代理程式特性 imq.persist.file.sync。如需這個特性的詳細資訊,請參閱表 14-6。
啟動代理程式實例時,您可以使用 imqbrokerd -reset 選項來清除檔案系統儲存。如需這個選項及其子選項的詳細資訊,請參閱表 13-2。
配置 JDBC 儲存
若要配置代理程式使用基於 JDBC 的持續性,請在代理程式配置檔案中設定 JDBC 的相關特性,並且建立適當的資料庫模式。Message Queue 資料庫管理員公用程式 (imqdbmgr) 使用 JDBC 驅動程式和代理程式配置特性來建立及管理資料庫。
例如,本章中描述的程序使用 Java 2 Platform, Enterprise Edition (J2EE) SDK 隨附的 PointBase DBMS。您可以從 java.sun.com 下載 1.4 版本。此範例使用 PointBase 的內嵌式版本 (並非用戶端/伺服器版本)。在執行程序中,說明均使用 PointBase 範例中的路徑名稱和特性名稱來加以描述。它們均用「範例︰」一詞識別。
您可以使用 Oracle 和 PointBase 配置範例。要尋找範例檔案,請參閱附錄 A「Message Queue 資料的作業系統特定位置」。請在列出作業系統資訊的表格中,尋找「範例應用程式與配置」。
此外,實例配置檔案 config.properties 中以注釋值的形式提供了 PointBase 內嵌版本、PointBase 伺服器版本和 Oracle 的範例。
插入 JDBC 可存取的資料儲存
插入 JDBC 可存取的資料儲存僅需要幾個步驟。
踊t插入 JDBC 可存取的資料儲存
- 在代理程式的配置檔案中設定與 JDBC 相關的特性。
請參閱基於 JDBC 的持續性中提供的特性。
- 將您的 JDBC 驅動程式 JAR 檔案的副本或符號連結放在以下路徑中:
/usr/share/lib/imq/ext/ (Solaris)
/opt/sun/mq/share/lib/ (Linux)
IMQ_VARHOME\lib\ext (Windows)
副本範例 (Solaris)︰
% cp j2eeSDK_install_directory/pointbase/lib/pointbase.jar /usr/share/lib/imq/ext
符號連結範例 (Solaris)︰
% ln -s j2eeSDK_install_directory/lib/pointbase/pointbase.jar /usr/share/lib/imq/ext
- 建立 Message Queue 持續性所需的資料庫模式。
使用 imqdbmgr create all 指令 (對於內嵌式資料庫) 或 imqdbmgr create tbl 指令 (對於外部資料庫)。請參閱資料庫管理員公用程式 (imqdbmgr)。
範例︰
- 變更 imqdbmgr 常駐的目錄。
cd /usr/bin (Solaris)
cd /opt/sun/mq/bin (Linux)
cd IMQ_HOME/bin (Windows)
- 輸入 imqdbmgr 指令。
imqdbmgr create all
備註
您若使用內嵌式資料庫,最好建立在下列目錄中:
…/instances/instanceName/dbstore/dabatabseName.
如果內嵌式資料庫未由使用者名稱和密碼保護,則可能由檔案系統許可權保護。若要確保代理程式可讀取和寫入資料庫,則執行此代理程式的使用者應與使用 imqdbmgr 指令建立內嵌式資料庫的使用者相同 (請參閱資料庫管理員公用程式 (imqdbmgr))。
與 JDBC 相關的代理程式特性
代理程式實例配置檔案儲存於以代理程式實例名稱作為辨別依據的目錄中,且代理程式實例與配置檔案相互關聯 (請參閱附錄 A「Message Queue 資料的作業系統特定位置」):
…/instances/instanceName/props/config.properties
如果此檔案不存在,那麼您必須使用 -name instanceName 選項啟動代理程式,讓 Message Queue 建立此檔案。
基於 JDBC 的持續性描述了當您插入 JDBC 可存取的資料儲存時,需要設定的配置特性。本節的最後有這些特性的摘要。您可以使用外掛持續性在每個代理程式實例的實例配置檔案 (config.properties) 中設定這些特性。
這些實例配置特性可讓您自訂建立 Message Queue 資料庫綱要的 SQL 程式碼:有一個指定 SQL 程式碼的可配置特性,此 SQL 程式碼可建立資料庫表格。這些特性需要利用外掛資料庫來指定適當的資料類型。
因為與 SQL 語法相關的資料庫供應商之間會有不相容的情形,所以請確切檢查您資料庫供應商提供的相對文件,並隨之調整表 14-7 中的特性。例如,使用 PointBase 資料庫時,您可能需要將 IMQMSG35 表格中的 MSG 欄寬調整到最大 (請參閱 imq.persist.jdbc.table.IMQMSG35 特性)。
如同所有的代理程式配置特性,可以使用 -D 指令行選項設定值。如果資料庫需要設定某些資料庫特定的特性,則當啟動代理程式 (imqbrokerd) 或資料庫管理員公用程式 (imqdbmgr) 時,還可以使用 -D 指令行選項設定這些值。
範例︰
在 PointBase 內嵌式資料庫範例中,您並不在資料庫連線 URL 中指定資料庫絕對路徑,而是使用 -D 指令行選項定義 PointBase 系統目錄:
-Ddatabase.home=IMQ_VARHOME/instances/instanceName/dbstore
在此情況下,您可以如下所示,指定 URL 來建立資料庫:
imq.persist.jdbc.createdburl=jdbc:pointbase:embedded:dbName;new
您可以如下所示,指定 URL 來開啟資料庫:
imq.persist.jdbc.opendburl=jdbc:pointbase:embedded:dbName
下面是 JDBC 相關特性的摘要:
- imq.persist.store。指定基於檔案或基於 JDBC 的資料儲存。
- imq.persist.jdbc.brokerid。指定附加至資料庫表格名稱的代理程式實例識別碼,以確保他們是唯一的。
- imq.persist.jdbc.driver。指定 JDBC 驅動程式的 Java 類別名稱,以連線至資料庫。
- imq.persist.jdbc.opendburl。指定資料庫 URL,以開啟與現有資料庫的連線。
- imq.persist.jdbc.createdburl。指定資料庫 URL,以開啟連線建立資料庫。
- imq.persist.jdbc.closedburl。指定資料庫 URL,以在關閉代理程式時關閉目前資料庫連線。
- imq.persist.jdbc.user。如有必要,則指定用於開啟資料庫連線的使用者名稱。
- imq.persist.jdbc.needpassword。指定資料庫是否需要密碼以存取代理程式。
- imq.persist.jdbc.password。如有必要,則指定用於開啟資料庫連線的密碼。
- imq.persist.jdbc.table.IMQSV35。用來建立版本表格的 SQL 指令。
- imq.persist.jdbc.table.IMQCCREC35。用來建立配置變更記錄表格的 SQL 指令。
- imq.persist.jdbc.table.IMQDEST35。用來建立目標表格的 SQL 指令。
- imq.persist.jdbc.table.IMQINT35。用來建立偏好表格的 SQL 指令。
- imq.persist.jdbc.table.IMQMSG35。用來建立訊息表格的 SQL 指令。
- imq.persist.jdbc.table.IMQPROPS35。用來建立特性表格的 SQL 指令。
- imq.persist.jdbc.table.IMQILIST35。用來建立偏好狀態表格的 SQL 指令。
- imq.persist.jdbc.table.IMQTXN35。用來建立作業事件表格的 SQL 指令。
- imq.persist.jdbc.table.IMQTACK35。用來建立作業事件確認表格的 SQL 指令。
如需這些特性的完整參照資訊,請參閱第 14 章「代理程式特性參照」。
資料庫管理員公用程式 (imqdbmgr)
Message Queue 提供資料庫管理員公用程式 (imqdbmgr),以設定持續性所需的模式。如果 Message Queue 資料庫表格損毀或者您想使用其他資料庫作為資料儲存,您還可以使用此公用程式刪除這些表格。
如需 imqcmd 指令的語法、子指令和選項的詳細資訊,請參閱第 13 章「指令參照」。
保護永久性資料永久性儲存可以包含暫時儲存的訊息檔案和其他資訊。由於這些訊息可能包含專用資訊,請務必保護資料儲存,以防止未經授權的存取。本節描述如何確保內建檔案儲存或 JDBC 儲存的資料安全。
內建 (基於檔案的) 永久性儲存
使用內建永久性的代理程式會將永久性資料寫入文字檔案資料儲存,該文字檔案資料儲存的位置是特定於作業系統的 (請參閱附錄 A「Message Queue 資料的作業系統特定位置」):
…/instances/instanceName/fs350/
此處的 instanceName 是辨別代理程式實例的名稱。
instanceName/filestore/ 目錄在代理程式實例首次啟動時建立。保護此目錄的程序取決於在其上執行代理程式的作業系統。
Solaris 和 Linux IMQ_VARHOME/instances/ instanceName/filestore/ 目錄的許可權取決於啟動代理程式實例的使用者的 umask。因此,透過適當地設定 umask,您可以限制啟動代理程式實例和讀取其永久性檔案的許可權。此外,管理員 (超級使用者) 可以透過將 IMQ_VARHOME/instances 目錄的許可權設定為 700 來保護永久性資料。
Windows IMQ_VARHOME/instances/ instanceName/filestore/ 目錄的許可權可以使用您所使用的 Windows 作業系統提供的機制來設定。這通常需要開啟目錄的內容對話方塊。
外掛 (JDBC) 永久性儲存
使用外掛永久性儲存的代理程式將永久性資料寫入 JDBC 相容的資料庫中。
對於由資料庫伺服器管理的資料庫 (例如 Oracle 資料庫),建議您建立使用者名稱和密碼,以存取 Message Queue 資料庫表格 (表格名稱以「IMQ」開頭)。如果資料庫不允許保護個別表格,請建立僅由 Message Queue 代理程式使用的專用資料庫。請諮詢資料庫供應商,以取得有關如何建立使用者名稱/密碼存取的文件。
代理程式開啟資料庫連線所需的使用者名稱和密碼可以作為代理程式配置特性提供。但是,在啟動代理程式時,將它們作為指令行選項提供會更加安全 (請參閱 Message Queue 管理指南的附錄 A「設定外掛永久性儲存」)。
對於代理程式透過資料庫 JDBC 驅動程式直接存取的內嵌式資料庫,通常是以設定儲存永久性資料的目錄上檔案許可權的方式來確保此資料庫的安全,內建 (基於檔案的) 永久性儲存中有詳細的描述。但是為確保代理程式和 imqdbmgr 公用程式都能讀取和寫入資料庫,二者應該由同一位使用者執行。