8

したがって、質問は、休閑方法を使用して春を使用して作成された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"/>

だから基本的に何が問題なのか。クライアントがいつでも実行できるinit/updateメカニズムがあり、このinit / updateの間、システムはこの時点では使用できず、メッセージが届いた場合は失われるため、メッセージの消費を停止したいと思います。

では、APIを使用してリスナーまたはリスナーコンテナまたは接続全体を停止するにはどうすればよいですか。クラスAbstractJmsListeningContainerに停止/開始があることがわかりましたが、どうすれば取得できますか?つまり、このjmsはどれも意味しません。listenerとlistener-containersには、名前などがあります。

4

3 に答える 3

11

リスナーコンテナにIDを割り当てることができます。次に、getBeanを呼び出すか、注入することによって、それへの参照を取得します。これにより、start/stopを呼び出すことができるAbstractJmsListeningContainerが提供されます。

于 2012-07-10T07:03:59.047 に答える
6

はい、それでうまくいきます。

<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();
于 2012-07-10T10:40:10.377 に答える
1

また、messageListenerContainerを取得して、stop()を呼び出すこともできます。

@javax.annotation.Resource //autowire by name
 private AbstractJmsListeningContainer myMessageListenerContainer;

 myMessageListenerContainer.stop();

 I'm using the more verbose setup of this container:
 <bean id="myMessageListenerContainer" class="org.springframework.jms.listener.DefaultMes sageListenerContainer">
 <property name="connectionFactory" ref="jmsConnectionFactory"/>
 <property name="destination" ref="myQueue"/>
 <property name="messageListener" ref="myListener"/>
 <property name="autoStartup" value="true" />
 </bean>

ここで、listenerContainerを自動的に開始したくない場合は、autoStartupをfalseに設定できることがわかります。

于 2017-02-07T09:47:09.293 に答える