gpt4 book ai didi

jms - Spring DefaultMessageListenerContainer - 监听器不读取 Websphere MQ 上的消息

转载 作者:行者123 更新时间:2023-12-04 14:36:13 25 4
gpt4 key购买 nike

我正在使用 Spring 3.0 - DefaultMessageListenerContainer 连接到 Websphere 6 MQ。 MQ 上已经存在一些消息。当我运行我的测试时,实现 SessionAwareMessageListener 的监听器启动。但是 onMessage() 不会被调用。所以问题是已经在队列中的消息没有被读取。

根据文档,默认情况下 autoStartup 为 true(我没有更改此设置)。根据我的理解,在启动时,监听器应该读取任何现有消息的队列,并且应该调用 onMessage()。如果这种理解有误,请告诉我。

这是配置文件中的片段:

    <bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsQueueConnectionFactory" />
<property name="destinationName">
<value>${queue}</value>
</property>
<property name="messageListener" ref="exampleMessageListener" />
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<property name="idleTaskExecutionLimit" value="4" />
<property name="maxMessagesPerTask" value="4" />
<property name="receiveTimeout" value="5000" />
<property name="recoveryInterval" value="5000" />
<property name="sessionTransacted" value="true" />
<property name="transactionManager" ref="jmsTransActionManager" />
</bean>

注意:没有错误/异常,测试应用程序启动得很好。

任何解决此问题的指针都会有很大帮助。

谢谢,
RJ

最佳答案

问题已解决。测试类在监听器获取消息之后终止,但在它可以将消息显示为输出之前终止。所以第一条消息(最高优先级的消息)从队列中丢失了。

后来,当我包含一个事务管理器时,监听器将消息放回队列中(由于监听器容器在此期间已停止,因此显示警告为拒绝接收到的消息)。由于这是一个警告并且我的记录器处于调试级别,因此我早些时候错过了这一点。

在测试类中放置一个 thread.sleep 确保它运行的时间更长,并且监听器可以按优先级顺序读取队列中的所有消息:)

干杯,
RJ

关于jms - Spring DefaultMessageListenerContainer - 监听器不读取 Websphere MQ 上的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8120866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com