Spring集成JMS在读取期间丢弃随机消息?

时间:2013-12-18 21:29:48

标签: spring jms spring-integration

我有一个生产应用程序似乎间歇性地丢失消息。我已经确定的一个例子是发送系统记录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被读取。在这种情况下,我看到服务器一个进程消息一个,服务器二进程消息两个...所以看起来像上面配置的两个服务器没有负面影响。关于可能发生什么或者如何调试丢失/丢弃消息的情况的任何其他想法?

版本信息:

  • 春天 - 3.0.5.RELEASE
  • Spring Integration - 2.0.3.RELEASE

1 个答案:

答案 0 :(得分:1)

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