Sun Java System Message Queue 3.7 UR1 管理指南

用戶流量限制

如果傳送到用戶端執行階段的有效負載訊息數超過了為任何用戶所設定的 imqConsumerFlowLimit 值,則會停止傳送訊息給該用戶。只有在傳送給該用戶的未使用訊息數低於此 imqConsumerFlowThreshold 設定值時,才會重新繼續傳送訊息。

以下範例說明這些限制的使用:考量主題用戶的設定值:

imqConsumerFlowLimit=1000
imqConsumerFlowThreshold=50

建立用戶時,代理程式會不間斷傳送第一批 1000 個訊息 (假設存在這些訊息) 給該用戶。傳送這 1000 個訊息之後,代理程式會停止傳送,直到用戶端執行階段要求傳送更多訊息。應用程式處理這些訊息前,用戶端執行階段會保留這些訊息。在要求代理程式傳送下一個批次之前,用戶端執行階段會允許應用程式使用至少 50% (imqConsumerFlowThreshold) 的訊息緩衝容量 (即 500 個訊息)。

在相同情況下,如果臨界值為 10%,則在要求傳送下一個批次之前,用戶端執行階段會等待應用程式至少使用 900 個訊息。

以下計算下一個批次的大小:

imqConsumerFlowLimit - (current number of pending msgs in buffer)

因此,如果imqConsumerFlowThreshold 為 50%,則下一個批次大小可介於 500 到 1000 之間,其實際數量取決於應用程式處理訊息的速度。

如果 imqConsumerFlowThreshold 設定過高 (接近 100%),則代理程式會嘗試傳送較小的批次,以降低訊息流量。如果該值過低 (接近 0%),則在代理程式傳送下一組批次之前,用戶端也許能完成處理其餘的緩衝訊息,這也會造成訊息流量下降。一般而言,除非您有特定的效能或可靠性考量,否則不需要變更 imqConsumerFlowThreshold 屬性的預設值。

用戶型流量控制 (尤其是 imqConsumerFlowLimit ) 是管理用戶端執行階段中記憶體的最佳方法。通常,根據用戶端應用程式,您會知道您在任何連線上需要支援的用戶數目、訊息容量和可用於用戶端執行階段的總記憶體容量。