【问题标题】:Permanent JMS Connection failure but no error永久 JMS 连接失败但没有错误
【发布时间】:2014-06-27 09:57:44
【问题描述】:

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

我似乎在任何地方都找不到任何错误消息,并且不知道如何进行进一步调查。有人有什么建议吗?

【问题讨论】:

  • 在开始收不到消息之前,是否有过空闲时间,主题中没有消息可以消费?
  • 我们每秒接收大约 10 条消息,因此应该不会有太多空闲时间
  • “我似乎在任何地方都找不到任何错误消息”是什么意思?堆栈跟踪?客户端错误日志? QMgr 错误日志? WMQ 全局错误日志?客户端跟踪?服务器端跟踪?为了建议后续步骤,了解您已经查看的确切内容会很有帮助。

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


【解决方案1】:

这是一个常见的问题;一些网络(防火墙、路由器)默默地丢弃空闲连接;如果供应商客户端没有收到套接字关闭的通知,则不会向上传播异常以强制重新连接。

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

【讨论】:

  • 感谢加里的建议。如果消息在主题上,套接字会空闲吗?我们每秒大约收到 10 条消息
  • 否;如果有一段时间没有数据,它们通常只会处于空闲状态。但无论如何,您的症状表明套接字已死,但客户端不知道。同样,心跳可以解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2013-07-16
  • 2017-07-08
  • 2021-03-26
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2012-06-19
相关资源
最近更新 更多