Sun Java System Message Queue 3.7 UR1 管理指南

代理程式服務

視服務或服務影響所及的代理程式元件之不同,代理程式配置特性可分為數個種類:

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

連線服務

訊息代理程式提供各種連線服務,以使用多種傳輸協定來支援應用程式與管理用戶端。與連線服務相關的代理程式配置特性,列於連線特性中。

表 4–1 顯示可用的連線服務,依據兩種特徵區分:

表 4–1 Message Queue 連線服務

服務名稱 

服務類型 

協定類型

jms

NORMAL

TCP

ssljms (Enterprise Edition)

NORMAL

TLS (SSL 型安全性)

httpjms (Enterprise Edition)

NORMAL

HTTP

httpsjms (Enterprise Edition)

NORMAL

HTTPS (SSL 型安全性)

admin

ADMIN

TCP 

ssladmin

ADMIN

TLS (SSL 型安全性) 

透過設定代理程式的 imq.service.activelist 特性,即可將代理程式配置為執行任一或所有這些連線服務。此特性的值是一組會在代理程式啟動時啟動的連線服務清單;若未明確指定此特性,將依預設啟動 jmsadmin 服務。

每個連線服務也支援特定的認證與授權功能;如需更多資訊,請參閱安全性服務

連接埠對映器

每種連線服務都是透過特定連接埠提供,此時需指定主機名稱 (或 IP 位址) 和連接埠號。您可以明確指定服務的靜態連接埠號,或由代理程式的連接埠對映器動態指定。連接埠對映器本身常駐於代理程式的主連接埠上,即通常位於標準連接埠號 7676 。(若有必要,您可以使用代理程式配置特性 imq.portmapper.port,以其他連接埠號來置換此值。)依預設,每個連線服務皆會在啟動時對連接埠對映器進行自我註冊。當用戶端建立與代理程式的連線時,Message Queue 用戶端執行階段會先連絡連接埠對映器,以請求連接埠號供需要的連線服務使用。

此外,您也可以使用 imq.serviceName.protocolType. port 配置特性置換連接埠對映器,並明確指定連線服務的靜態連接埠號 (其中 serviceName protocolType 表示特定的連線服務,如表 4–1 所示)。(只有 jmsssljmsadminssladmin 連線服務能夠以這種方式進行配置;httpjmshttpsjms 服務使用不同的配置特性,如附錄 CHTTP/HTTPS 支援 所述)。但是,靜態連接埠通常僅在特殊情況下使用,例如透過防火牆連線 (請參閱透過防火牆連線),一般不建議使用。


備註 –

在具有兩部或更多主機的環境下 (例如在電腦上安裝了多張網路卡時),您可以使用代理程式特性來指定連線服務所要連結的主機。imq.hostname 特性可為所有連線服務指定單一的預設主機;而此預設值可在必要時,由下列特性所置換:imq.serviceName. protocolType.hostname (針對 jmsssljmsadminssladmin 服務) 或 imq.portmapper.hostname (針對連接埠對映器本身)。


同時收到多個連接埠對映器請求時,這些請求會儲存在作業系統積存區中等候執行動作。imq.portmapper.backlog 特性會針對這些位於積存區中的請求,指定數量上限。超過此上限時,就會拒絕其他請求,直到積存區量降低為止。

執行緒池管理

每個連線服務均為多重執行緒,支援多重連線。代理程式會針對每個服務,在個別的執行緒池中維護這些連線所需的執行緒。在連線需要執行緒時,這些執行緒就會新增到執行緒池中,供支援該連線的服務使用。

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

代理程式的 imq.serviceName. threadpool_model 特性,可指定已知連線服務應使用這兩種模型中的哪一種。此特性會採用下列兩個字串值之一: dedicatedshared。若未明確設定特性,則會依預設採用 dedicated

您也可以設定代理程式特性 imq.serviceName. min_threadsimq.serviceName. max_threads,來指定服務執行緒池的最小與最大執行緒數。當可用的執行緒超過此最小臨界值時,Message Queue 將會在執行緒成為閒置狀態時關閉這些執行緒,直到再次達到最小值為止,以節省記憶體資源。在負載量較大的情況下,執行緒的數目會增加,直至達到執行緒池的最大數目為止;此時會拒絕新的連線,直至有執行緒變為可用為止。

共用執行緒模型會使用分散執行緒,將執行緒指定給使用中的連線。代理程式特性 imq.shared.connectionMonitor_limit 可指定由單一分散執行緒監視的最大連線數。此特性的值越小,執行緒指定給連線的速度就越快。imq.ping.interval 特性會指定一個以秒為單位的時間間隔,讓代理程式依此間隔定期測試 (「ping」) 連線,以驗證該連線是否仍在使用中,如此就可以預先偵測到連線失敗,避免所嘗試執行的訊息傳輸失敗。

路由服務

用戶端連線至代理程式後,即可路由訊息及傳送訊息。在此階段中,代理程式必須建立及管理不同類型的實體目標,以確保訊息能順利傳送並有效利用資源。您可以使用路由特性所述的代理程式配置特性,以根據應用程式需要的方式管理這些工作。

代理程式的效能和穩定性取決於記憶體之類的可用系統資源,以及利用這類資源的效率如何。您可以設定配置特性,以防止代理程式被大量內送訊息佔用,或防止記憶體不足。這些特性可在三個不同的層級上起作用,以確保訊息服務在資源不足的情況下仍可運作:

這些系統記憶體臨界值被觸發時,表示整個系統與目標的訊息限制可能設定得太高。由於記憶體臨界值不一定總能及時偵測到可能的記憶體超載,因此您不應根據它們來控制記憶體用量,而應重新配置整個系統與目標限制,使記憶體資源最佳化。

永久性服務

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

Message Queue 支援檔案式與 JDBC 型永久性模組 (請參閱圖 4–1)。檔案式永久性會使用個別的檔案來儲存永久性資料;而 JDBC 型永久性則使用 Java 資料庫連結 (JDBC™) 介面,將代理程式連線至與 JDBC 相容的資料存放區。檔案式永久性通常快於 JDBC 型永久性;但是某些使用者偏好 JDBC 相容存放區所提供的備援和管理控制功能。代理程式配置特性 imq.persist.store (請參閱表 14–4) 可指定使用哪一種形式的永久性。

圖 4–1 永久性資料存放區

說明永久性服務使用平面檔案式資料存放區或 JDBC 型資料存放區的圖表。

檔案式永久性

依預設,Message Queue 會使用檔案式永久性資料存放區,其中的個別檔案會儲存如訊息、目標、長期訂閱與作業事件等永久性資料。與檔案式永久性相關的代理程式配置特性,會在檔案式永久性中列出。

檔案式存放區位於以資料存放區所屬之代理程式實例的名稱 (instanceName) 作為辨識依據的目錄中:

/instances/instanceName
/fs350/

(請參閱附錄 AMessage QueueTM 資料的特定平台位置,以瞭解 instances 目錄的所在位置。)代理程式上的每個目標,都會將其保留訊息的子目錄傳送到該目標上。


備註 –

由於永久性資料存放區可能包含機密或專有訊息,因此您應保護 /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 特性為 true,則池中所有的檔案就會在代理程式關閉時被清空,而成為清除狀態;如此將可節省儲存空間,但會減緩關閉程序的速度。

作業系統將資料寫入永久性存放區時,可選擇應以同步還是「延遲」(非同步) 的方式寫入資料。在系統當機的情況下,若代理程式認為資料已寫入永久性存放區,但事實上並非如此時,延遲儲存就可能導致資料遺失。為確保完全的可靠性 (必須犧牲效能),您可以將代理程式特性 imq.persist.file.sync.enabled 設為 true,使所有資料皆以同步方式寫入。如此一來,當系統從當機狀態回復時將必定會有可用的資料,讓代理程式能可靠地重新繼續執行作業。但請注意,雖然資料並未遺失,但叢集內的任何其他代理程式無法使用這些資料,因為叢集代理程式此時並未共用資料。

JDBC 型永久性

您也可以不使用檔案式永久性,而設置代理程式存取任何可透過 JDBC 相容驅動程式存取的資料存放區。其中包含設定適當的 JDBC 相關代理程式配置特性,以及使用資料庫管理者公用程式 (imqdbmgr),建立具有適當模式的資料庫。如需詳細資訊,請參閱配置 JDBC 型存放區

配置代理程式使用 JDBC 資料庫的特性,列於JDBC 型永久性中。您可以透過以下方式指定這些特性:使用每個代理程式實例的實例配置檔 (config.properties),或者使用代理程式公用程式 (imqbrokerd) 或資料庫管理者公用程式 (imqdbmgr) 的 -D 指令行選項。

imq.persist.jdbc.driver 特性可提供在連線資料庫時要使用的 JDBC 驅動程式之 Java 類別名稱。另外還有特性可指定連線至現有資料庫 (imq.persist.jdbc.opendburl)、建立新資料庫 (imq.persist.jdbc.createdburl) 以及關閉資料庫連線 (imq.persist.jdbc.closedburl) 時所需的 URL。

imq.persist.jdbc.userimq.persist.jdbc.password 特性可提供存取資料庫所需的使用者名稱與密碼;imq.persist.jdbc.needpassword 是指定是否需要密碼的布林值旗標。基於安全理由,密碼僅能在透過 -passfile 指令行選項所指定的密碼檔案中指定;若未指定此密碼檔案,imqbrokerdimqdbmgr 指令就會以互動方式提示使用者提供密碼。同樣地,使用者名稱也可以從指令行上透過 imqbrokerd 指令的 -dbuser 選項,或 imqdbmgr-u 選項提供。

由多個代理程式實例共用的 JDBC 資料庫中,配置特性 imq.persist.jdbc.brokerid 可為每個實例指定唯一的實例識別碼,以附加到資料庫表格的名稱中。(由於內嵌式資料庫僅為一個代理程式實例儲存資料,因此通常不需要此屬性。)其餘與 JDBC 相關的配置特性,可用以自訂建立資料庫模式的 SQL 程式碼,每個資料庫表格各有一個適用的特性。例如,imq.persist.jdbc.table.IMQSV35 特性提供的 SQL 指令可用以建立版本表格;imq.persist.jdbc.table.IMQCCREC35 可用於建立配置變更記錄表格;imq.persist.jdbc.table.IMQDEST35 則用於建立目標表格... 等等。請參閱表 14–6 以取得完整清單。


備註 –

由於資料庫系統所需的 SQL 語法有所不同,因此請務必查看資料庫供應商提供的文件,以瞭解詳細資訊。


安全性服務

Message Queue 可提供使用者存取控制 (認證與授權) 與加密所需的安全性服務:

身為 Message Queue 管理員,您必須負責設定代理程式進行使用者認證及使用者授權作業時所需的資訊。與安全性服務相關的代理程式特性,列於安全性特性中。布林值特性 imq.accesscontrol.enabled 的角色為主開關,可控制是否要將存取控制套用於整個代理程式;若要進行細部控制,您可置換特定連線服務的此設定,只要設定 imq.serviceName .accesscontrol.enabled 特性即可,其中 serviceName 是連線服務的名稱,如表 4–1 所示:例如 imq.httpjms.accesscontrol.enabled

圖 4–2 顯示代理程式提供認證與授權服務時所需的元件。這些服務取決於包含訊息傳送系統使用者相關資訊的使用者儲存庫:其名稱、密碼與群組成員身份。此外,若要為使用者或群組的特定作業授權,代理程式必須查詢存取控制特性檔案,因為此檔案指定了使用者或群組可執行的作業。您可以使用配置特性 imq.accesscontrol.file.filename 為整個代理程式指定單一存取控制特性檔案,也可以使用 imq.serviceName. accesscontrol.file.filename,為單一連線服務指定存取控制特性檔案。

圖 4–2 安全性支援

圖表顯示代理程式的安全性服務採用使用者儲存庫和存取控制特性檔案。

圖 4–2 所示,您可以將使用者資料儲存在隨附於 Message Queue 服務的平面檔案使用者儲存庫中,也可以外掛至預先存在的簡易目錄存取協定 (LDAP) 儲存庫:

代理程式的 imq.authentication.basic.user_repository 特性可指定要使用的儲存庫類型。一般而言,如果延展性很重要,或者如果需要不同代理程式共用儲存庫 (例如在使用代理程式叢集的情況下),則使用 LDAP 儲存庫是不錯的選擇。如需設置平面檔案或 LDAP 使用者儲存庫的更多資訊,請參閱使用者認證

認證

請求連線至代理程式的用戶端必須提供使用者名稱與密碼,供代理程式將其與使用者儲存庫中儲存的資料進行比較。從用戶端傳輸到代理程式的密碼,會以 Base64 編碼 (適用於平面檔案儲存庫) 或訊息摘要 (MD5) 雜湊法 (適用於 LDAP 儲存庫) 進行編碼。選擇哪一種編碼方式,由代理程式的 imq.authentication.type 特性整體控制,或由特定連線服務的 imq.serviceName. authentication.type 控制。imq.authentication.client.response.timeout 特性會設定認證請求的逾時時間間隔。

密碼檔案所述,您可以選擇將密碼存入密碼檔案中,而不需以互動方式提示您提供密碼。布林值代理程式特性 imq.passfile.enabled 可控制此選項。若此特性為 true,imq.passfile.dirpathimq.passfile.name 特性就會提供密碼檔案的目錄路徑與檔案名稱。imq.imqcmd.password 特性 (可內嵌於密碼檔案中) 可指定管理使用者在使用指令公用程式 (imqcmd) 管理代理程式、連線服務、連線、實體目標、長期訂閱與作業事件所使用的認證密碼。

若您使用 LDAP 型使用者儲存庫,則能使用多種代理程式特性來配置 LDAP 查找的各種設定。LDAP 伺服器本身的位址 (主機名稱與連接埠號) 由 imq.user_repository.ldap.server 所指定。imq.user_repository.ldap.principal 特性會提供連結到 LDAP 儲存庫所需的辨別名稱,而 imq.user_repository.ldap.password 則會提供相關的密碼。其他特性會指定個別使用者與群組搜尋的目錄基底與選用 JNDI 篩選器,以及使用者和群組名稱的提供者專用屬性識別碼等等;請參閱安全性特性以瞭解詳細資訊。

授權

經過認證後,使用者即有權執行各項 Message Queue 的相關活動。身為 Message Queue 管理員,您可以定義使用者群組,並指定其個別的使用者成員身份。預設的存取控制特性檔案僅明確參考一個群組 admin (請參閱群組)。此群組中的使用者具有 admin 連線服務的連線權限,此權限可讓使用者執行管理功能,如建立目標、監視及控制代理程式。依預設,您定義的任何其他群組中的使用者,均無法取得 admin 服務連線。

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

加密

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

若要使用 SSL 型的 Message Queue 連線服務,您必須使用金鑰工具公用程式 (imqkeytool),產生成對的私密金鑰/公開金鑰。此公用程式會將公開金鑰內嵌於自我簽署的憑證中,並放置在 Message Queue 金鑰庫中。金鑰庫本身受密碼保護;若要解除鎖定,您必須在啟動時提供由 imq.keystore.password 特性所指定的金鑰庫密碼。一旦金鑰庫解除鎖定,代理程式即可將憑證傳送至請求連線的任何用戶端。然後,用戶端即可使用此憑證設定與代理程式的加密連線。

imq.audit.enabled 代理程式特性可控制記錄到 Message Queue 代理程式記錄檔中的稽核記錄;如需更多資訊,請參閱稽核記錄

監視服務

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

圖 4–3 說明一般方案。用以配置監視服務的代理程式特性,列於檢視特性中。

圖 4–3 監視支援

圖表顯示記錄程式的輸入、錯誤層級和輸出通道。圖以文字介紹。

度量產生器

度量產生器可提供代理程式作業的相關資訊,例如傳入和傳出代理程式的訊息流量、代理程式記憶體中的訊息數量和使用的記憶體、開啟連線的數量,以及使用的執行緒數量。布林值代理程式特性 imq.metrics.enabled 可控制是否記錄此類資訊;imq.metrics.interval 則指定記錄的頻率。

記錄程式

記錄程式會擷取代理程式程式碼與度量產生器所產生的資訊,並將此資訊寫入標準輸出 (主控台)、記錄檔;若在 Solaris 平台上,在發生錯誤時則會寫入 syslog 常駐程式程序。 imq.log.file.dirpathimq.log.file.filename 代理程式特性會指定要使用的記錄檔;imq.log.console.stream 會指定主控台輸出應導向 stdout 還是 stderr

imq.log.level 特性可控制記錄程式所收集的度量資訊種類:ERRORWARNING INFO。每個層級都會包含更高的層級,因此,若您指定 WARNING 作為記錄層級,則也會記錄錯誤訊息。imq.log.console.outputimq.log.file.output 特性分別控制哪些指定的種類會寫入主控台與記錄檔。但在此情況下,種類包含比自身更高的層級;例如,如果要將錯誤與警告寫入記錄檔,且將參考訊息寫入主控台時,必須明確將 imq.log.file.output 設為 ERROR|WARNING,將 imq.log.console.output 設為 INFO。在 Solaris 平台上有另一個特性 imq.log.syslog.output,可指定要寫入 syslog 常駐程式的度量資訊種類。另外還有 imq.destination.logDeadMsgs 特性,可指定在停用的訊息被捨棄或移至停用的訊息佇列時,是否要加以記錄。

對於記錄檔,您可以指定何時關閉該檔案並將輸出自動重建至新的記錄檔。一旦記錄檔達到指定的大小 (imq.log.file.rolloverbytes) 或存在時間 (imq.log.file.rolloversecs),就會將其儲存並建立新的記錄檔。

請參閱檢視特性,以瞭解與記錄有關的其他代理程式特性,並參閱配置及使用代理程式記錄功能,以進一步瞭解如何配置記錄程式,以及如何利用記錄程式取得效能資訊。

度量訊息產生者 (企業版)

度量訊息產生者會在固定時間間隔接收度量產生器傳送的資訊,並將資訊寫入度量訊息,接著根據訊息中包含的度量資訊類型,將訊息傳送到其中一個度量主題目標 (請參閱表 4–2)。訂閱這些度量主題目標的 Message Queue 用戶端,可以使用這些訊息並處理訊息所包含的度量資料。這允許開發者建立自訂監視工具以支援訊息傳送應用程式。如需每個度量訊息類型中所報告之度量數目的詳細資訊,請參閱「Message Queue Developer's Guide for Java Clients

表 4–2 度量主題目標

主題名稱 

度量資訊的類型

mq.metrics.broker

代理程式度量 

mq.metrics.jvm

Java 虛擬機器度量 

mq.metrics.destination_list

目標及其類型的清單 

mq.metrics.destination.queue.queueName

特定佇列的目標度量 

mq.metrics.destination.topic.topicName

特定主題的目標度量 

代理程式特性 imq.metrics.topic.enabledimq.metrics.topic.interval,可分別控制訊息是否要傳送到度量主題目標及傳送的頻率。imq.metrics.topic.timetoliveimq.metrics.topic.persist 特性可指定此類訊息的使用期限及其是否具有永久性。

除了度量訊息內文包含的資訊外,每個訊息的標頭還包含提供下列額外資訊的特性:

這些特性對處理不同類型或不同代理程式的度量訊息之用戶端應用程式十分有用。