我正在使用Mule ESB CE 3.5.0,並且看到我認爲是TCP連接上的資源泄漏。我連接VisualVM並檢查內存。我發現它隨着時間的推移而不斷減少。Mule ESB CE 3.5.0 TCP重新連接策略
我的場景是我有消息被髮送到Mule,Mule做它的事情,然後調度到遠程TCP端點(通常在同一個盒子上)。我所做的不是啓動該程序,該程序會收到來自Mule的TCP出站端點的消息。所以沒有人聽取穆勒的調度信息。
配置我的TCP連接如下:
<tcp:connector name="TcpConnector" keepAlive="true" keepSendSocketOpen="true" sendTcpNoDelay="true" reuseAddress="true">
<reconnect-forever frequency="2000" />
<tcp:xml-protocol />
</tcp:connector>
<tcp:endpoint name="TcpEndpoint1" responseTimeout="3000" connector-ref="TcpConnector" host="${myHost}" port="${myPort}" exchange-pattern="one-way" />
我的問題是:
當流量未能發送到TCP出站端點,會發生什麼消息?消息是否保存在內存中,並且一旦TCP連接器建立到遠程端點的連接,所有累積的消息是否突然通過並被分派?
當重新連接策略被阻止時,我認爲它是一個嘗試建立連接的調度器線程。如果我們有更多的消息要發送,那麼是否有更多的調度程序線程與嘗試重新連接綁定?如果它是非阻塞的會發生什麼?
謝謝!
編輯:
如果我也明白the threading documentation correctly,這是否意味着,如果我有默認的線程配置文件設置爲poolExhaustedAction =「RUN」,所有的調度程序線程阻塞等待連接,最終流線,然後接收者線程在嘗試建立連接時會阻塞。當遠程應用程序再次開始監聽時,來自被阻止的線程的所有積壓的消息將突然通過。
所以如果流接收到瞬態數據,它應該配置爲無阻塞重新連接,並且由於丟棄消息是可以接受的(在我的使用情況下),那麼我們可以處理異常拋出。