Jboss 客户端会话由HornetQ关闭

Jboss 客户端会话由HornetQ关闭,jboss,jms,hornetq,Jboss,Jms,Hornetq,我们在HornetQ中遇到了以下异常(HornetQ 2.2.5 GA,JBoss 4.3.3,InVM连接器。客户端和服务器都在同一台机器上): hornetq故障检查线程,检测到连接故障:未从invm接收数据:0。 错误代码为3(即HornetQException.CONNECTION\u TIMEDOUT) 这将导致RemotingServiceImpl.FailureCheckAndFlushThread运行,该线程多次写入以下日志: 客户端连接失败,正在清除会话95406085-7b3

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

hornetq故障检查线程,检测到连接故障:未从invm接收数据:0。 错误代码为3(即HornetQException.CONNECTION\u TIMEDOUT)

这将导致RemotingServiceImpl.FailureCheckAndFlushThread运行,该线程多次写入以下日志:

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

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

读完这篇文章:

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

此配置解决了问题,并且没有再现上述错误

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

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

HornetQException[错误代码=0消息=创建会话失败]

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


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

与其这样做,不如配置“重试”并使用适当的值,这样您的连接将重新连接

但是,由于您使用的是inVM,并且只要不停止服务器,您就可以使用该配置。但是,如果只想重新启动服务器,则可以使用“重新连接重试”(-1),然后重新连接或重新创建会话


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

Clebert,在hornetq 2.3.0.CR1中,是您所指的设置-1是的,我会看看activemq artemis,它现在是上游
ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(connectorConfig);
locator.setClientFailureCheckPeriod(Long.MAX_VALUE);
locator.setConnectionTTL(-1);