Sun Java System Message Queue 3.7 UR1 管理指南

永久性服務

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

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 語法有所不同,因此請務必查看資料庫供應商提供的文件,以瞭解詳細資訊。