JOK*_*OKe 8 spring jms spring-jms
所以问题是如何使用以下方式临时停止并启动使用spring创建的jms侦听器:
<amq:connectionFactory id="exampleJmsFactory" brokerURL="tcp://${jms.broker.url}" />
<jms:listener-container concurrency="1" connection-factory="exampleJmsFactory" destination-type="queue" message-converter="exampleMessageConverter">
<jms:listener destination="incoming.example.client.queue" ref="exampleProductsMessageConsumer" method="consume"/>
</jms:listener-container>
<bean id="exampleProductsMessageConsumer" class="com.unic.example.jms.receive.JmsExampleProductsMessageConsumer" scope="tenant"/>
Run Code Online (Sandbox Code Playgroud)
基本上问题是什么呢.我们确实有一个初始化/更新机制,客户端可以随时运行,并且在这个初始化/更新期间我想停止消耗任何消息,因为系统在这段时间内不可用,如果有消息,它将丢失.
所以我如何使用API来停止监听器或监听器容器或整个连接.我发现一个类AbstractJmsListeningContainer有停止/启动但我怎么能得到它?我的意思是没有这个jms:listener和listener-containers有一个名字或类似的东西.
gka*_*mal 11
您可以为侦听器容器分配id.然后通过调用getBean或将其注入来获取对它的引用.这将为您提供一个AbstractJmsListeningContainer,您可以在其上调用start/stop.
是的,这就是诀窍.
<jms:listener-container concurrency="1" connection-factory="exampleJmsFactory" destination-type="queue" message-converter="exampleMessageConverter">
<jms:listener id="exampleProductsMessageListener" destination="incoming.example.client.queue" ref="exampleProductsMessageConsumer" method="consume"/>
</jms:listener-container>
DefaultMessageListenerContainer exampleProductsMessageListener= Registry.getApplicationContext().getBean("exampleProductsMessageListener", DefaultMessageListenerContainer.class);
exampleProductsMessageListener.stop();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20453 次 |
最近记录: |