用戶端連線至代理程式後,即可路由訊息及傳送訊息。在此階段中,代理程式必須建立及管理不同類型的實體目標,以確保訊息能順利傳送並有效利用資源。您可以使用路由特性所述的代理程式配置特性,以根據應用程式需要的方式管理這些工作。
代理程式的效能和穩定性取決於記憶體之類的可用系統資源,以及利用這類資源的效率如何。您可以設定配置特性,以防止代理程式被大量內送訊息佔用,或防止記憶體不足。這些特性可在三個不同的層級上起作用,以確保訊息服務在資源不足的情況下仍可運作:
整個系統的訊息限制完全適用於系統上所有的實體目標。其中包括代理程式保留訊息的數量上限 (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。
這些系統記憶體臨界值被觸發時,表示整個系統與目標的訊息限制可能設定得太高。由於記憶體臨界值不一定總能及時偵測到可能的記憶體超載,因此您不應根據它們來控制記憶體用量,而應重新配置整個系統與目標限制,使記憶體資源最佳化。