【问题标题】:ClientSession is closed by HornetQClientSession 被 HornetQ 关闭
【发布时间】:2013-02-05 09:54:48
【问题描述】:

我们在 HornetQ 中遇到了以下异常(HornetQ 2.2.5 GA 和 JBoss 4.3.3,带有 InVM 连接器。客户端和服务器都在同一台机器上):

hornetq-failure-check-thread,检测到连接失败:没有从invm:0接收数据。 错误代码为 3(即 HornetQException.CONNECTION_TIMEDOUT)。

这会导致 RemotingServiceImpl.FailureCheckAndFlushThread 运行,它会多次写入以下日志:

客户端连接失败,正在清理会话 95406085-7b3a-11e2-86d3-005056b14e26 的资源

请注意,在我们的应用程序中,我们重用了我们的 ClientSession。我们每个连接都有一个 ClientSession 实例(我们打开多个连接,每个客户端一个),上述问题导致其中一个会话被关闭。

看完这篇文章后:Connection timeout issues - Connection failure has been detected

我知道我们需要在我们的 ServerLocator 实例上配置以下内容(用于创建创建我们的 ClientSessions 的 ClientSessionFactory):

ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(connectorConfig);
locator.setClientFailureCheckPeriod(Long.MAX_VALUE);
locator.setConnectionTTL(-1);

这个配置解决了问题,上面的错误没有重现。

我们的问题如下 - 如果 HornetQ 由于其他原因再次关闭会话,我们如何创建新会话而不是关闭的会话?

我问这个是因为在我们发现会话关闭之后(并且在我们设置 clientFailure 和 clientTTL 值之前),我们尝试通过调用 createSession(false, true, true)ClientSessionFactory 实例上的 /em> 方法(我们只在系统启动时创建该实例一次并从那时起重新启动它)并且它失败并出现以下错误:

HornetQException[errorCode=0 message=创建会话失败]

所以我们没有成功创建新会话,唯一的解决方案是重新启动 JBoss。

请注意,我们无法在客户端站点上重新启动应用程序,因此我们需要找到一种方法来创建新会话,以防旧会话因某种原因而关闭。

【问题讨论】:

    标签: jboss jms hornetq


    【解决方案1】:

    您可能应该配置重试并使用适当的值,而不是这样做,这样您的连接将被重新连接。

    但是由于您使用的是 inVM,并且只要您不停止服务器,您就可以使用该配置。但是,如果您打算仅重新启动服务器,则可以使用 reconnectionRetry (-1),会话将被重新连接或重新创建给您。

    无论如何,我建议您使用 2.2.5 之后的更新版本。

    【讨论】:

    • Clebert,在 hornetq 2.3.0.CR1 中,是您引用的设置 -1
    • 是的,我会看看现在上游的activemq-artemis
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多