慢速網路會遺失大型訊息
常見問題 > 錯誤 > 慢速網路會遺失大型訊息
注意
本文僅適用於舊版本的 ActiveMQ Classic,例如 5.3 和 5.4.0。從 5.4.2 版本開始,此問題已在錯誤 AMQ-2511 和 AMQ-2088 中解決。
您在使用慢速網路傳送大型訊息時可能會遇到問題。
症狀通常是網路連線會中斷並持續重新建立。
此問題的發生原因是 ActiveMQ Classic 訊息代理程式會持續檢查 Socket 上的活動,並且在 TCP Socket 緩衝區中建立大型訊息時,非活動監控器會逾時 - 請參閱設定連線格式和 TCP 傳輸參考。
非活動監控器使用一個活動標誌,該標誌僅在收到訊息後才會更新 (以防連線並非閒置)。
然後,監控器會清除活動標誌,等待逾時時間,並查看活動標誌。如果它仍然清除,那麼我們假設連線處於非活動狀態。當連線未使用時,會傳送保持連線訊息。但是,如果連線因為正在傳送/接收較大型訊息而正在使用中,則不會傳送保持連線訊息,並且活動標誌也不會更新。這可能會導致非活動逾時。
理想情況下,每當從網路接收到幾個位元組時,活動標誌就會被清除…但目前僅在組裝完整訊息時才會清除。
您可以將 wireFormat.maxInactivityDuration 屬性設定為較高的值,或停用它(將其設定為零)來解決此問題。
例如,像這樣設定您的網路連線
<?xml version=”1.0” encoding=”UTF-8”?>