Sun Java System Message Queue 3.7 UR1 管理指南

檔案式永久性

依預設,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,使所有資料皆以同步方式寫入。如此一來,當系統從當機狀態回復時將必定會有可用的資料,讓代理程式能可靠地重新繼續執行作業。但請注意,雖然資料並未遺失,但叢集內的任何其他代理程式無法使用這些資料,因為叢集代理程式此時並未共用資料。