ClientSession由HornetQ关闭

时间:2013-02-20 11:49:49

标签: jboss jms hornetq

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

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

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

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

请注意,在我们的应用程序中,我们重用了ClientSessions。我们每个连接有一个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。

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

1 个答案:

答案 0 :(得分:2)

您应该配置重试并使用正确的值,而不是这样做,这样就可以重新连接您的连接。

但是既然你正在使用inVM,并且只要你不停止服务器就可以使用该配置。但是,如果您打算仅重新启动服务器,则可以使用reconnectionRetry(-1)并重新附加会话或重新创建会话。

无论如何,我建议你去2.2.5之外的新版本。