代理程式的配置由一組配置檔案和在啟動時傳給 imqbrokerd 指令的選項所管理。本章說明可用的配置特性,以及如何使用它們來配置代理程式。
本章包含下列各節:
如需代理程式配置特性的完整參考資訊,請參閱第 14 章, 代理程式特性參照。
視服務或服務影響所及的代理程式元件之不同,代理程式配置特性可分為數個種類:
以下各節描述每項服務,以及針對特殊需求用以自訂服務的特性。
訊息代理程式提供各種連線服務,以使用多種傳輸協定來支援應用程式與管理用戶端。與連線服務相關的代理程式配置特性,列於連線特性中。
表 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」) 連線,以驗證該連線是否仍在使用中,如此就可以預先偵測到連線失敗,避免所嘗試執行的訊息傳輸失敗。
用戶端連線至代理程式後,即可路由訊息及傳送訊息。在此階段中,代理程式必須建立及管理不同類型的實體目標,以確保訊息能順利傳送並有效利用資源。您可以使用路由特性所述的代理程式配置特性,以根據應用程式需要的方式管理這些工作。
代理程式的效能和穩定性取決於記憶體之類的可用系統資源,以及利用這類資源的效率如何。您可以設定配置特性,以防止代理程式被大量內送訊息佔用,或防止記憶體不足。這些特性可在三個不同的層級上起作用,以確保訊息服務在資源不足的情況下仍可運作:
整個系統的訊息限制完全適用於系統上所有的實體目標。其中包括代理程式保留訊息的數量上限 (imq.system.max_count),以及此類訊息所佔用的位元組總數上限 (imq.system.max_size)。若達到其中一項限制,代理程式就會拒絕任何新的訊息,直到擱置的訊息低於該限制為止。此外對個別訊息的容量上限 (imq.message.max_size) 與收回過期訊息的時間間隔 (imq.message.expiration.interval) 方面,也有相關的限制。
個別目標限制會控制傳送到特定實體目標的訊息流量。控制這些限制的配置特性在第 15 章, 實體目標特性參照中有所說明。這些限制包括:目標所能保留的訊息數量與容量、所能建立的訊息產生器與用戶的數量,以及可納入相同批次傳送到目標的訊息數量等等。
目標可配置為透過下列方式回應記憶體限制:減緩訊息產生者傳送訊息的速度、拒絕新的內送訊息,或丟棄最舊或優先權最低的現有訊息。以這種方式從目標中刪除的訊息,可選擇移至停用的訊息佇列中,而不是直接捨棄;代理程式特性 imq.destination.DMQ.truncateBody 可控制是整個訊息內文還是只有標頭與特性資料儲存在停用的訊息佇列中。
為了在開發及測試應用程式時方便作業,您可以配置訊息代理程式,使其在訊息產生器或用戶嘗試存取不存在的目標時,自動建立新的實體目標。表 14–3 中所摘要的代理程式特性與剛剛說明的特性相同,但適用於自動建立的目標,而非管理員所建立的目標。
系統記憶體臨界值定義了記憶體用量的層級,代理程式會依據這些層級採取越來越嚴格的動作,以便防止記憶體超載。 這類的用量定義共有四種:
綠色:有大量記憶體可用。
黃色:代理程式記憶體開始減少。
橙色:代理程式記憶體不足。
紅色:代理程式無記憶體可用。
用以定義這些層級的記憶體用量百分比,分別由代理程式特性 imq.green.threshold、 imq.yellow.threshold、 imq.orange.threshold 與 imq.red.threshold 所指定,預設值為綠色 0%、 黃色 80%、橙色 90%、紅色 98%。
記憶體用量到達下一層級時,代理程式即會按階段做出回應,首先將訊息由使用中記憶體移出至永久性存放區,然後減少產生器產生的非永久性訊息,直到最後停止訊息傳入代理程式中。(上述兩種方法皆會降低代理程式效能。)若要減少產生的訊息,必須將每個批次作業大小限制為 imq.resourceState .count 特性所指定的訊息數,其中 resourceState 分別為green、yellow、orange 或 red。
這些系統記憶體臨界值被觸發時,表示整個系統與目標的訊息限制可能設定得太高。由於記憶體臨界值不一定總能及時偵測到可能的記憶體超載,因此您不應根據它們來控制記憶體用量,而應重新配置整個系統與目標限制,使記憶體資源最佳化。
如果要在代理程式故障時回復,則此代理程式需要重新建立其訊息傳送作業的狀態。為執行此作業,代理程式必須將狀態資訊儲存到永久性資料存放區。重新啟動代理程式時,它會使用儲存的資料來重新建立目標和長期訂閱、回復永久性訊息、回復開啟的作業事件,並為未傳送的訊息重新建立路由表。然後,它可以重新繼續訊息傳送。
Message Queue 支援檔案式與 JDBC 型永久性模組 (請參閱圖 4–1)。檔案式永久性會使用個別的檔案來儲存永久性資料;而 JDBC 型永久性則使用 Java 資料庫連結 (JDBC™) 介面,將代理程式連線至與 JDBC 相容的資料存放區。檔案式永久性通常快於 JDBC 型永久性;但是某些使用者偏好 JDBC 相容存放區所提供的備援和管理控制功能。代理程式配置特性 imq.persist.store (請參閱表 14–4) 可指定使用哪一種形式的永久性。
依預設,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 相關代理程式配置特性,以及使用資料庫管理者公用程式 (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.user 與 imq.persist.jdbc.password 特性可提供存取資料庫所需的使用者名稱與密碼;imq.persist.jdbc.needpassword 是指定是否需要密碼的布林值旗標。基於安全理由,密碼僅能在透過 -passfile 指令行選項所指定的密碼檔案中指定;若未指定此密碼檔案,imqbrokerd 與 imqdbmgr 指令就會以互動方式提示使用者提供密碼。同樣地,使用者名稱也可以從指令行上透過 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 所示,您可以將使用者資料儲存在隨附於 Message Queue 服務的平面檔案使用者儲存庫中,也可以外掛至預先存在的簡易目錄存取協定 (LDAP) 儲存庫:
若您選擇平面檔案儲存庫,就必須使用 Message Queue 使用者管理員公用程式 (imqusermgr) 管理儲存庫。此為內建選項,使用非常方便。
如果要使用現有的 LDAP 伺服器,可以使用 LDAP 供應商提供的工具來寫入和管理此使用者儲存庫。此外,您必須在代理程式的實例配置檔案中設定特性,讓代理程式能查詢 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.dirpath 與 imq.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 代理程式記錄檔中的稽核記錄;如需更多資訊,請參閱稽核記錄。
代理程式包含可監視和診斷應用程式和代理程式效能的元件。這些元件包括:
產生資料的元件,即度量產生器與記錄事件的代理程式程式碼
記錄程式元件,可將輸出資訊寫入到多個輸出通道
度量訊息產生者,可將包含度量資訊的 JMS 訊息傳送到主題目標,以供 JMS 監視用戶端使用
圖 4–3 說明一般方案。用以配置監視服務的代理程式特性,列於檢視特性中。
度量產生器可提供代理程式作業的相關資訊,例如傳入和傳出代理程式的訊息流量、代理程式記憶體中的訊息數量和使用的記憶體、開啟連線的數量,以及使用的執行緒數量。布林值代理程式特性 imq.metrics.enabled 可控制是否記錄此類資訊;imq.metrics.interval 則指定記錄的頻率。
記錄程式會擷取代理程式程式碼與度量產生器所產生的資訊,並將此資訊寫入標準輸出 (主控台)、記錄檔;若在 Solaris 平台上,在發生錯誤時則會寫入 syslog 常駐程式程序。 imq.log.file.dirpath 與 imq.log.file.filename 代理程式特性會指定要使用的記錄檔;imq.log.console.stream 會指定主控台輸出應導向 stdout 還是 stderr。
imq.log.level 特性可控制記錄程式所收集的度量資訊種類:ERROR、WARNING 或 INFO。每個層級都會包含更高的層級,因此,若您指定 WARNING 作為記錄層級,則也會記錄錯誤訊息。imq.log.console.output 與 imq.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.enabled 與 imq.metrics.topic.interval,可分別控制訊息是否要傳送到度量主題目標及傳送的頻率。imq.metrics.topic.timetolive 與 imq.metrics.topic.persist 特性可指定此類訊息的使用期限及其是否具有永久性。
除了度量訊息內文包含的資訊外,每個訊息的標頭還包含提供下列額外資訊的特性:
訊息類型
傳送訊息之代理程式的位址 (主機名稱與連接埠號)
度量範例需要的時間
這些特性對處理不同類型或不同代理程式的度量訊息之用戶端應用程式十分有用。
您可以使用下列兩種方法之一來指定代理程式的配置特性:
編輯代理程式的配置檔案
直接從指令行提供特性值
以下兩節將說明這兩種配置代理程式的方法。
代理程式配置檔案含有配置代理程式時所需的特性設定。這些設定會根據您所使用的作業系統平台存放在適當的目錄中;請參閱附錄 AMessage QueueTM 資料的特定平台位置,以瞭解詳細資訊。此目錄儲存以下檔案:
預設配置檔案 default.properties,在啟動時載入。此檔案不可編輯,但您可以閱讀此檔案以確定預設值,並找到要變更之特性的確切名稱。
安裝配置檔案 install.properties,包含安裝 Message Queue 時指定的所有屬性。此檔案在安裝後無法編輯。
此外,各個代理程式實例也有其本身的實例配置檔案,如下所述。如果您連線叢集中的代理程式實例,可能還需要使用叢集配置檔案以指定叢集配置資訊;如需更多資訊,請參閱叢集配置特性。
啟動時,代理程式會合併不同配置檔案中的特性值。如圖 4–4 所示,這些檔案會形成一個階層,在此階層中,實例配置檔案的指定值會置換安裝配置檔案中的指定值,而安裝配置檔案中的指定值則會置換預設配置檔案中的指定值。在階層頂端,您可以手動置換任何在配置檔案中指定的特性值,只要使用 imqbrokerd 指令的指令行選項即可。
首次執行代理程式時,會為該代理程式實例建立一個包含配置特性的實例配置檔案。此實例配置檔案名為 config.properties,儲存在以其所屬之代理程式實例名稱所識別的目錄中:
…/instances/ instanceName/props/config.properties
(請參閱附錄 AMessage QueueTM 資料的特定平台位置,以瞭解 instances 目錄的所在位置。)若該檔案不存在,您必須在啟動代理程式時使用 -name 選項 (請參閱代理程式公用程式),指定可供 Message Queue 建立檔案的實例名稱。
instances/instanceName 目錄和實例配置檔案,歸其對應的代理程式實例的建立者所有。代理程式實例必須始終由同一個使用者重新啟動。
實例配置檔案由代理程式實例所維護,並會在您使用 Message Queue 管理公用程式變更配置時進行修改。您也可以手動編輯實例配置檔案,以自訂代理程式的運作方式與資源使用。若要執行此動作,您必須是 instances/ instanceName 目錄的擁有者,或以 root 的身份登入並變更目錄的存取權限。
代理程式只能在啟動時讀取其實例配置檔案。若要對代理程式的配置進行永久性的變更,必須先關閉代理程式並編輯檔案,然後再重新啟動代理程式。該檔案 (或任何配置檔案) 中的特性定義會使用下列語法:
propertyName=value [[,value1] …]
例如,以下項目指定代理程式會在記憶體和永久性存放區中最多保留 50,000 個訊息,之後則會拒絕其他訊息:
imq.system.max_count=50000
以下項目指定每天 (86,400 秒) 會建立一個新的記錄檔:
imq.log.file.rolloversecs=86400
請參閱代理程式服務與第 14 章, 代理程式特性參照,以瞭解可用代理程式配置特性及其預設值的相關資訊。
您可以在啟動代理程式時或啟動之後,在指令行上輸入代理程式配置選項。
啟動時,可以使用代理程式公用程式 (imqbrokerd) 來啟動代理程式實例。使用指令的 -D 選項,可用以指定任何代理程式配置特性及其值;如需更多資訊,請參閱啟動代理程式與代理程式公用程式。如果您使用服務管理員公用程式 (imqsvcadmin) 將代理程式啟動為 Windows 服務,則 -args 選項可用來指定啟動配置特性;請參閱服務管理員公用程式。
執行代理程式實例時,您也可以變更某些代理程式特性。若要修改執行中代理程式的配置,可以使用指令公用程式的 imqcmd update bkr 指令;請參閱更新代理程式特性與代理程式管理。
代理程式的永久性資料存放區中含有實體目標、長期訂閱、訊息、作業事件與確認等項目的相關資訊。Message Queue 代理程式的預設配置會使用檔案式永久性存放區,但您可以重新配置,以外掛可透過 JDBC 相容驅動程式加以存取的任何資料存放區。 代理程式配置特性 imq.persist.store (請參閱表 14–4) 可指定使用哪一種形式的永久性。
本節將說明如何設定代理程式使用永久性存放區。它包括以下主題:
建立代理程式實例時,會自動建立檔案式資料存放區。此存放區位於代理程式的實例目錄中;請參閱附錄 AMessage QueueTM 資料的特定平台位置,以瞭解確切位置。
依預設,Message Queue 會以非同步方式將作業寫入至磁碟。作業系統可以緩衝這些作業,以提供更好的效能。但是,如果寫入作業期間發生意外的系統失敗,則訊息可能會遺失。若要增強可靠性 (必須犧牲效能),您可以設定代理程式特性 imq.persist.file.sync,改為以同步方式寫入資料。如需此特性的詳細討論,請參閱檔案式永久性與表 14–5。
啟動代理程式實例時,可以使用 imqbrokerd 指令的 -reset 選項來清除檔案系統存放區。如需此選項及其子選項的更多資訊,請參閱代理程式公用程式。
若要配置讓代理程式使用 JDBC 型永久性,請在代理程式的實例配置檔案中設定與 JDBC 相關的特性,並且建立適當的資料庫模式。Message Queue 資料庫管理者公用程式 (imqdbmgr) 使用 JDBC 驅動程式和代理程式配置特性來建立及管理資料庫。也可以使用資料庫管理者從資料庫中刪除毀壞的表格,或使用其他資料庫作為資料存放區。如需更多資訊,請參閱資料庫管理者公用程式。
Oracle 和 PointBase 資料庫產品有範例配置可供使用。這些檔案的位置視平台而異,且已列在附錄 AMessage QueueTM 資料的特定平台位置 相關表格的「範例應用程式與配置」中。此外,PointBase 內嵌式版本、PointBase 伺服器版本與 Oracle 的範例,會在實例配置檔案 config.properties 中以註釋值的形式提供。
在代理程式的配置檔案中設定與 JDBC 相關的特性。
相關特性在JDBC 型永久性中討論並於表 14–6 中列出。特別是,您必須將代理程式 imq.persist.store 特性設為 jdbc (請參閱永久性特性)。
將 JDBC 驅動程式 .jar 檔案的副本或符號連結放入下列位置:
在 Solaris 上:
/usr/share/lib/imq/ext/ |
在 Linux 上:
/opt/sun/mq/share/lib/ |
在 Windows 上:
IMQ_VARHOME\\lib\\ext |
例如,若您要在 Solaris 系統上使用 PointBase,下列指令就會將驅動程式的 .jar 檔案複製到適當的位置上:
% cp j2eeSDKInstallDirectory/pointbase/lib/pointbase.jar /usr/share/lib/imq/ext |
下列指令則會建立符號連結:
% ln -s j2eeSDKID/lib/pointbase/pointbase.jar /usr/share/lib/imq/ext |
建立 Message Queue 永久性所需的資料庫模式。
使用 imqdbmgr create all 指令 (針對內嵌式資料庫) 或 imqdbmgr create tbl 指令 (針對外部資料庫);請參閱資料庫管理者公用程式。
變更 imqdbmgr 所在的目錄:
在 Solaris 上:
cd /usr/bin |
在 Linux 上:
cd /opt/sun/mq/bin |
在 Windows 上:
cd IMQ_HOME\\bin |
輸入 imqdbmgr 指令:
imqdbmgr create all
若使用內嵌式資料庫,最好在下列目錄中建立:
… /instances/ instanceName/dbstore/ databaseName
如果內嵌式資料庫沒有使用者名稱和密碼保護,則可能由檔案系統權限所保護。若要確保代理程式可讀取和寫入資料庫,則執行此代理程式的使用者應與使用 imqdbmgr 指令建立內嵌式資料庫的使用者相同。
永久性存放區可以包含暫時儲存的訊息檔案和其他資訊。由於這些訊息可能包含專用資訊,請務必保護資料存放區,以防止未經授權的存取。本節將說明如何確保檔案式或 JDBC 型資料存放區的資料安全。
使用檔案式永久性的代理程式,會將永久性資料寫入平面檔案資料存放區中,而此存放區的位置會隨平台而有所不同 (請參閱附錄 AMessage QueueTM 資料的特定平台位置):
…/instances/ instanceName/fs350/
其中,instanceName 是識別代理程式實例的名稱。
instanceName/fs350/ 目錄會在代理程式實例首次啟動時建立。保護此目錄的程序取決於執行代理程式所在的作業系統平台:
在 Solaris 與 Linux 上,目錄的權限取決於啟動代理程式實例之使用者的檔案模式建立遮罩 (umask)。因此,透過適當地設定遮罩,即可限制啟動代理程式實例和讀取其永久性檔案的權限。此外,管理員 (超級使用者) 可以透過將 instances 目錄的權限設定為 700,保護永久性資料。
在 Windows 上,目錄的權限可透過 Windows 作業系統所提供的機制來設定。這通常需要開啟目錄的 [內容] 對話方塊。
使用 JDBC 型永久性的代理程式,會將永久性資料寫入與 JDBC 相容的資料庫中。對於由資料庫伺服器所管理的資料庫 (例如 Oracle),建議您建立使用者名稱和密碼,以存取 Message Queue 資料庫表格 (表格名稱以 IMQ 開頭)。如果資料庫不允許保護個別表格,請建立僅由 Message Queue 代理程式使用的專用資料庫。請參閱資料庫供應商提供的文件,以取得如何建立使用者名稱及密碼存取的相關資訊。
代理程式開啟資料庫連線所需的使用者名稱和密碼,可透過代理程式配置特性來提供。但若在啟動代理程式時將其作為指令行選項提供,則有更高的安全性,方法是使用 imqbrokerd 指令的 -dbuser 與 -dbpassword 選項 (請參閱代理程式公用程式)。
對於代理程式透過資料庫的 JDBC 驅動程式直接存取的內嵌式資料庫,通常是透過設定檔案在儲存永久性資料的目錄上的權限來確保此資料庫的安全,保護檔案式存放區中會有詳細說明。但是為確保代理程式和資料庫管理者公用程式都能讀取和寫入該資料庫,兩者應該由同一位使用者執行。