我具有以下配置以消耗隊列中的消息。我需要確保任務執行程序一次只執行一項任務,因此我也按以下方式配置了任務執行程序。DefaultMessageListenerContainer間歇地消費消息
<bean name="jmsTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="1" />
<property name="maxPoolSize" value="2" />
</bean>
當我配置如上我的任務執行,10條消息得到在同一時間(有消息隊列中有巨大的流量)消耗和容器停止偵聽消息幾乎10-15 minutes.My容器配置如下:
<bean id="queueContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="cachedConnectionFactory" />
<property name="destination" ref="queue" />
<property name="maxConcurrentConsumers" value="1" />
<property name="idleTaskExecutionLimit" value="1" />
<property name="idleConsumerLimit" value="5" />
<property name="receiveTimeout" value="10000" />
<property name="recoveryInterval" value="10000" />
<property name="taskExecutor" ref="jmsTaskExecutor" />
<property name="messageListener" ref="queueListener" />
<property name="autoStartup" value="true" />
</bean>
做谷歌搜索一點點後,我試圖用的,而不是ThreadPoolTaskExecutor類和SyncTaskExecutor,我已經配置如下我taskExecutor的:
<bean name="jmsTaskExecutor"
class="org.springframework.core.task.SyncTaskExecutor" />
但是這導致了tomcat中的內存泄漏。
請您告訴我如何才能實現消耗消息並在任務完成後才能處理消息到任務的行爲?
隊列偵聽器代碼如下:
public class QueueListener implements SessionAwareMessageListener<Message>{
@override
public void onMessage(Message msg,Session ses) throws JMSException{
....
....
....
}
}
你可以發佈你的queueListener代碼嗎?還發布剩餘的XML配置?預取大小是多少? – brainOverflow
我沒有明確地設置預取大小,我發佈了我的queueListener代碼。你可以請現在檢查嗎? –