복붙노트

[SPRING] Spring을 사용하여 JMS Listener 시작 및 중지

SPRING

Spring을 사용하여 JMS Listener 시작 및 중지

그래서 질문은 일시적으로 봄을 사용하여 생성 된 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를 durring하고 있습니다. 나는이 시간에 시스템을 사용할 수 없으며 메시지가 왔을 때 어떤 메시지도 사용하지 않기를 원합니다.

그렇다면 API를 사용하여 리스너 또는 리스너 컨테이너 또는 전체 연결을 중단하는 방법. 클래스 AbstractJmsListeningContainer가 중지 / 시작을 찾았지만 어떻게 가져올 수 있습니까? 나는이 jms : listener 및 listener-containers 중 어느 것도 이름이나 이와 유사한 것을 가지고 있지 않다는 것을 의미합니다.

해결법

  1. ==============================

    1.리스너 컨테이너에 ID를 할당 할 수 있습니다. 그런 다음 getBean을 호출하거나 주입하는 방법으로 참조를 얻으십시오. 이렇게하면 시작 / 중지를 호출 할 수있는 AbstractJmsListeningContainer가 제공됩니다.

    리스너 컨테이너에 ID를 할당 할 수 있습니다. 그런 다음 getBean을 호출하거나 주입하는 방법으로 참조를 얻으십시오. 이렇게하면 시작 / 중지를 호출 할 수있는 AbstractJmsListeningContainer가 제공됩니다.

  2. ==============================

    2.네, 그 트릭을 않습니다.

    네, 그 트릭을 않습니다.

    <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();
    
  3. ==============================

    3.messageListenerContainer를 보유하고 stop ()을 호출 할 수도 있습니다.

    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로 설정할 수 있습니다.

  4. from https://stackoverflow.com/questions/11407838/start-and-stop-jms-listener-using-spring by cc-by-sa and MIT license