【问题标题】:Spring integration JMS dropping random messages during reading?Spring集成JMS在阅读期间丢弃随机消息?
【发布时间】:2014-01-07 06:14:53
【问题描述】:

我有一个生产应用程序似乎间歇性地丢失消息。我已经确定的一个示例是发送系统记录 3 条消息,这些消息相隔几毫秒发送。接收系统记录它收到消息 1 和消息 3...但没有收到消息 2。队列的深度为 0。我在读取消息的应用程序的日志中没有看到任何错误,表明发生了不好的事情。

我已验证没有其他“流氓”客户端为读取消息创建竞争条件。

这是我的配置;我们有一个主要和次要/故障转移队列...

<bean id="primaryProficiencyInboundQueue" class="com.ibm.mq.jms.MQQueue">
  <property name="baseQueueManagerName" value="${lsm.primary.outbound.manager}"/>
  <property name="baseQueueName" value="${lsm.proficiency.inbound.queue}"/>
</bean>

<bean id="secondaryProficiencyInboundQueue" class="com.ibm.mq.jms.MQQueue">
  <property name="baseQueueManagerName" value="${lsm.secondary.outbound.manager}"/>
  <property name="baseQueueName" value="${lsm.proficiency.inbound.queue}"/>
</bean>

<int:channel id="inboundProficiencyChannel">
  <int:interceptors>
    <int:wire-tap channel="logger" />
  </int:interceptors>
</int:channel>

<!-- adapter that connects the inbound proficiency queues to the inboundProficiencyChannel  -->
<jms:message-driven-channel-adapter id="primaryProficiencyInboundAdapter" 
    connection-factory="primaryConnectionFactory" 
    destination="primaryProficiencyInboundQueue" 
    channel="inboundProficiencyChannel" />

<jms:message-driven-channel-adapter id="secondaryProficiencyInboundAdapter"
    connection-factory="secondaryConnectionFactory" 
    destination="secondaryProficiencyInboundQueue" 
    channel="inboundProficiencyChannel" />

<int:service-activator id="proficiencyInboundActivator" 
   input-channel="inboundProficiencyChannel">
   <bean class="com.myactivator.LSMInboundProficiencyActivator" />
</int:service-activator>

有没有可能是某事默默地失败了?

另一件值得注意的事情是,有两台生产服务器都按照上述方式进行配置......这意味着有两台服务器配置了 JMS 适配器来读取消息。我在上面提到我看到消息 1 和消息 3 正在阅读。在这种情况下,我看到服务器 1 处理消息 1 和服务器 2 处理消息 2 ......所以看起来像上面配置的两台服务器没有负面影响。关于可能发生的事情或我如何调试丢失/丢失消息的情况有任何其他想法吗?

版本信息:

  • 春季 - 3.0.5.RELEASE
  • Spring 集成 - 2.0.3.RELEASE

【问题讨论】:

    标签: spring jms spring-integration


    【解决方案1】:

    没有想到会导致消息丢失的事情;我不记得曾经被报道过。但是 2.0.3 是相当古老的(即将迎来 3 岁生日)。我们不再支持 2.0.x,但您至少应该更新到 2.0.6,这是 2.0.x 的最后一个版本。但最好升级到最新的 3.0.0 版本(或至少 2.2.6)。

    【讨论】:

    • PS:当我在该领域工作时,此类问题总是由其他开发人员运行的客户端“窃取”队列中的消息引起的。 “我已经确认没有其他“流氓”客户端......”。这是测试人员一直告诉我的,但我们 100% 找到了。
    • 中间的消息不见了特别可疑;大多数经纪人对消费者进行循环。
    • 我一直在想同样的事情,但是在深入研究了较低环境的配置文件后,我没有发现任何错误配置指向 prod 队列。但是您关于轮询的评论让我开始思考,而且我确实发现我们的批处理环境正在加载相同的配置并且其日志记录配置不同,因此它没有显示它正在读取消息。关于为什么数据没有按预期显示在目标系统中,我仍然有一个谜要解决……但至少我知道它不是丢失/丢失的消息。谢谢!
    猜你喜欢
    • 2020-06-17
    • 2012-06-26
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多