我有一个生产应用程序似乎间歇性地丢失消息。我已经确定的一个例子是发送系统记录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被读取。在这种情况下,我看到服务器一个进程消息一个,服务器二进程消息两个...所以看起来像上面配置的两个服务器没有负面影响。关于可能发生什么或者如何调试丢失/丢弃消息的情况的任何其他想法?
版本信息:
答案 0 :(得分:1)
没有人会想到会导致信息丢失;我不记得曾经被报道过;但2.0.3很古老(即将到来的第3个生日)。我们不再支持2.0.x了,但至少应该更新到2.0.6,这是2.0.x的最后一个版本。但最好升级到最新的3.0.0版本(或至少2.2.6)。