2017-04-04 44 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>