【发布时间】:2017-09-01 14:10:11
【问题描述】:
我正在使用HemrèsJMS 测试我的 MQueue,每次发送消息时,我都有三分之二的 MQ 消息丢失。
我有以下配置:
<bean id="mqConnectionFactory" class="com.integrator.init.MqConnectionFactory" init-method="init"
scope="singleton">
<property name="environnement" ref="env" />
<property name="destination" value=""/>
</bean>
<bean id="cachedConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="mqConnectionFactory" />
<property name="sessionCacheSize" value="3" />
</bean>
<bean id="listenerPitagorCPY" class="com.integrator.pitagor.cpy.messaging.listenerPitagorCPY">
<property name="pitagorCPYDelegate" ref="pitagorCPYDelegate"/>
</bean>
<bean id="pitagorCPYListener"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="autoStartup" value="false" />
<property name="connectionFactory" ref="cachedConnectionFactory" />
<property name="destination" ref="defaultDestination" />
<property name="messageListener" ref="listenerPitagorCPY" />
<property name="concurrentConsumers" value="4" />
</bean>
<bean id="defaultDestination" scope="singleton" class="com.ibm.mq.jms.MQQueue">
<constructor-arg value="#{mqConnectionFactory.destination}" />
</bean>
以下监听器每发送三个消息就会触发一次:
public class listenerPitagorCPY implements MessageListener {
@Override
public void onMessage(Message message) {
// some work
}
}
编辑:
常规模式是:"Nok, Nok, OK, Nok, Nok, OK, Nok, Nok, OK " ...
当我添加<property name="concurrentConsumers" value="3" />时,模式变为“Nok,Nok,OK,OK,OK,Nok,Nok,OK,OK,OK , 不, 不, 好的, 好的, 好的" ...
关于“为什么”这种接收模式存在的任何想法?
谢谢
【问题讨论】:
-
'autoStartup' 为假有什么原因吗?您可以尝试使用“真实”值吗?
-
@kmansoor 我不得不将其设置为 False,因为我手动启动和停止 MQueue(来自应用程序的 IHM)。查看此以获取更多详细信息stackoverflow.com/questions/43207792/…
-
你能肯定地说队列中没有其他听众吗?
-
是的,如果有另一个听众,它就不会有这样一个规范的消费模式。此外,正如我在问题的“编辑”部分中所述,
concurrentConsumers也会对这种模式产生影响 -
每次发送 1 条消息,您又会丢失 2 条消息?这些其他消息来自哪里?你能展示一下放置消息的代码和获取消息的代码吗?
标签: spring message-queue ibm-mq spring-jms