永久JMS连接失败但没有错误

时间:2014-05-09 15:23:39

标签: java spring jms ibm-mq spring-integration

我有3台服务器 - 2台服务器运行相同的spring集成应用程序和1台websphere MQ服务器。两个应用程序都连接到同一主题。

在看似无法预测的时间(有时是几小时,有时是几天)之后,两个应用程序都停止接收消息。两个应用程序几乎同时发生此故障。应用程序需要重新启动才能恢复。

两个应用程序都有以下配置:

<bean id="jmsInputFactory" class="com.ibm.mq.jms.MQTopicConnectionFactory">
    <property name="queueManager" value="MyQM" />
    <property name="hostName" value="x.x.x.x" />
    <property name="port" value="15004" />
    <property name="transportType" value="1" />
    <property name="channel" value="MYCHANNEL" />
    <property name="clientId" value="${system.description}"></property>
</bean>

<bean id="cachedConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="jmsInputFactory"></property>
</bean>

<bean id="jmsDestinationResolver"
    class="org.springframework.jms.support.destination.DynamicDestinationResolver" />

<jms:message-driven-channel-adapter 
    channel="myChannel" 
    connection-factory="cachedConnectionFactory"
    destination-resolver="jmsDestinationResolver"
    pub-sub-domain="true"
    destination-name="MYTOPIC" />

我无法在任何地方找到任何错误信息,对于如何进行进一步调查感到茫然。有没有人有任何建议?

1 个答案:

答案 0 :(得分:0)

这是一个常见的问题;一些网络(防火墙,路由器)静默地丢弃空闲连接;如果供应商客户端没有被告知套接字关闭,那么没有异常传播到堆栈中以强制重新连接。

解决这些问题的通常方法是启用某种心跳以保持空闲套接字处于活动状态(从网络的角度来看)。请参阅JMS供应商的文档,了解如何进行设置。