2017-04-04 36 views
0

我有我的mqueue中進行以下配置:無法停止mqueue中聽衆

<jms:listener-container container-type="default" connection-factory="cachedConnectionFactory" acknowledge="auto"> 
    <jms:listener id="myListenerId" destination="myDestination" ref="myListener" method="onMessage" /> 
</jms:listener-container> 

當我試圖阻止JMS消息的接收,我寫了下面的代碼

jmsManagement = myProject.instance.getContext().getBean('myListenerId',Lifecycle.class); 
jmsManagement.stop(); 

PS:

  • 當我stop()我的聽衆中,isRunning()返回False,但是我還是到T消息他MQueue ... onMessage被觸發。
  • jmsManagement是類別Lifecycle的一個實例。即使當我將其更改爲DefaultMessageListenerContainer時,也是如此。
  • 即使在autoStartup設置爲false時,我也會在致電start()之前收到消息。
  • jmsManagement.shutdown();沒有停止偵聽器被觸發。

有沒有人有關於如何停止這個MQ監聽器的想法? 有什麼我失蹤了嗎?

+0

什麼cachedConnectionFactory的高速緩存級別?他必須> = 1個 –

+0

@HassenBennour 它實際上等於3 '<屬性名= 「sessionCacheSize」 VALUE = 「3」/>' – Radhwen

+0

對不起我的意思DefaultMessageListenerContainer.cacheLevel,嘗試調用DefaultMessageListenerContainer.shutdown()停止連接&關閉聽衆 –

回答

0

我實際上必須將autoStartup設置爲true

既然不能做到這一點使用jms:listener-container,我實例化一個DefaultMessageListenerContainer bean和autoStartup屬性設置爲

這裏是爲我工作的代碼:

<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer" id="pitagorCPYListener"> 
    <property name="autoStartup" value="false" /> 
    <property name="connectionFactory" ref="cachedConnectionFactory" /> 
    <property name="destination" ref="defaultDestination" /> 
    <property name="messageListener" ref="listenerPitagorCPY" /> 
</bean> 

<bean id="defaultDestination" class="com.ibm.mq.jms.MQQueue"> 
    <constructor-arg value="#{mqConnectionFactory.destination}"/> 
    </bean>