Spring 在活动MQ中,许多MessageListener中只有一个在读取时卡住,仍然会导致队列增长
我无法理解ActiveMQ队列上的奇怪行为。不太擅长ActiveMQ,所以我希望有人能帮上忙 我有一个队列,在tomcat中配置。我通过Spring配置了一个MessageListener,它有3个实例。 他们基本上做一个HTTP请求,处理答案并将答案放在另一个队列中 昨天,我遇到了连接问题,所以(SOAP)请求超时。发生这种情况时,我抛出一个自定义异常,在“onMessage”中捕获它,并在响应队列上发送一条错误消息。 然后我可以看到侦听器从队列中删除了另一条消息,然后挂起。没有例外。为什么会这样我不确定,我正在调查 但奇怪的是: 这发生在我的三个MessageListeners中的两个。他们停了下来,但我的第三个仍然在队列中读取。但是,在我重新启动服务器之前,队列正在增长,队列大小超过500条消息 被挂起的两个侦听器的“dispatchedqueuesize”大约为每个侦听器的一半 因此,对我来说,似乎放在队列上的消息对于每个侦听器都是“保留”的,即使它们没有主动地从队列中读取。我可以看到“活动”侦听器仍在处理消息,所以为什么它不处理每条消息??我希望听众只是按照他们输入的顺序阅读信息。如果只剩下一条“消息”,它仍然应该读取队列中的每条消息。为什么它不这么做 非常感谢你的指点 编辑:下面是接收端的Spring配置Spring 在活动MQ中,许多MessageListener中只有一个在读取时卡住,仍然会导致队列增长,spring,jms,activemq,spring-jms,Spring,Jms,Activemq,Spring Jms,我无法理解ActiveMQ队列上的奇怪行为。不太擅长ActiveMQ,所以我希望有人能帮上忙 我有一个队列,在tomcat中配置。我通过Spring配置了一个MessageListener,它有3个实例。 他们基本上做一个HTTP请求,处理答案并将答案放在另一个队列中 昨天,我遇到了连接问题,所以(SOAP)请求超时。发生这种情况时,我抛出一个自定义异常,在“onMessage”中捕获它,并在响应队列上发送一条错误消息。 然后我可以看到侦听器从队列中删除了另一条消息,然后挂起。没有例外。为什么会
<amq:connectionFactory id="refConnectionFactory" brokerURL="${jms.broker.url}" clientID="theclient"/>
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="refConnectionFactory"/>
<property name="sessionCacheSize" value="10"/>
</bean>
<!-- JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<constructor-arg ref="connectionFactory"/>
</bean>
<!-- listener container definition using the jms namespace, concurrency is the max number of concurrent listeners that can be started -->
<jms:listener-container concurrency="3">
<jms:listener id="locationListener" destination="location.out" ref="locationQueryListener"/>
</jms:listener-container>
线程很可能挂在代码的某个地方;使用jstack获取线程转储,以查看容器线程正在做什么。当然可以,但它不能解释队列为什么会不断增长。发回重审的听者继续阅读,但似乎只阅读了大约三分之一的信息,它应该阅读每一条。在其他地方得到提示,可能是因为预回迁设置。我要看看这个。