Mule ESB CE 3.5.0 TCP重新连接策略

时间:2014-12-19 23:00:09

标签: sockets tcp mule esb

我正在使用Mule ESB CE 3.5.0并且看到我认为TCP连接上的资源泄漏。我正在连接VisualVM并检查内存。我看到它随着时间的推移而增加而不会减少。

我的场景是我将消息发送到Mule,Mule做了它的事情,然后调度到远程TCP端点(通常在同一个盒子上)。我所做的并不是启动从Mule的TCP出站端点接收消息的程序。所以没有什么可以听Mule发送的消息。

我将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" />

我的问题是:

  1. 当流无法发送到TCP出站端点时,该消息会发生什么?消息是否保存在内存中,一旦TCP连接器建立与远程端点的连接,所有累积的消息是否会突发并被分派?

  2. 当重新连接策略阻塞时,我认为它是一个尝试建立连接的调度程序线程。如果我们有更多的消息要发送,那么是否有更多的调度程序线程与尝试重新连接相关联?如果它是非阻塞会发生什么?

  3. 谢谢!

    编辑:

    如果我也理解the threading documentation correctly,那是否意味着如果我将默认线程配置文件设置为poolExhaustedAction =“RUN”,并且所有调度程序线程阻塞等待连接,最终流线程,然后接收器线程将阻止尝试建立连接。当远程应用程序再次开始侦听时,来自被阻塞线程的所有积压消息都将突然显示。

    因此,如果流接收瞬态数据,则应将其配置为具有非阻塞重新连接,并且因为可以丢弃消息(在我的用例中),然后我们可以处理将被抛出的异常

1 个答案:

答案 0 :(得分:0)

我会指向documentation

  

非阻止重新连接

     

默认情况下,重新连接策略将阻止Mule应用程序   消息处理直到它能够连接/重新连接。当你   启用非阻塞重新连接,应用程序不需要   在重新启动之前等待所有端点重新连接。此外,   如果连接丢失,则重新连接发生在线程上   与应用程序线程分开。请注意,此类行为可能或   可能不合适,具体取决于您的应用需求。

在阻止重新连接策略时,您将获得的是调度程序将被阻止,以获得可用的连接。这些消息在技术上并没有保留在任何地方,它们的流量只是停止了。

关于第二个问题,它在运输和运输之间发生了变化。在这种非常特殊的情况下,假设tcp是每个请求传输的连接,不同的调度程序将尝试从getconnections尝试另一个套接字。

如果是非阻止策略,您将获得异常。您可以轻松地测试它。