2016-11-24 2 views
0

Spring은 @JMSListener 주석을 제공하여 특정 대기열의 메시지를 수신합니다. implement JmsListenerConfigurer 대신에 MessageListener을 등록 할 수도 있습니다.Spring JMS 요청 시작시 jms 대기열 수신 대기

두 경우 모두 큐의 이름은 응용 프로그램이 시작될 때 코드에서 하드 코딩하거나 속성을 통해 알 수 있어야합니다.

시작한 지 얼마 안되어 응용 프로그램에 이름이 알려진 대기열을 수신 대기하는 방법이 있습니까?

답변

1

이렇게하면됩니다.

  1. @JmsListener에는 더미 큐 이름과 id을 구성합니다.
  2. autoStartup false로 구성하십시오.
  3. 준비가되면 JmsListenerEndpointRegistry에서 id을 사용하여 수신기 컨테이너에 대한 참조를 가져옵니다 (레지스트리를 앱에 자동 연결하고 getListenerContainer(id)).
  4. 컨테이너를 AbstractMessageListenerContainer으로 전송하고 setDestinationName (또는 setDestination)을 원하는 대기열로 호출합니다.
  5. start() it입니다.
+1

동적으로 많은 컨테이너를 만들고 싶다면 프로그래밍 방식으로 컨테이너를 만들고 'afterPropertiesSet()'을 호출 한 다음 'start()'를 호출하면됩니다. –

+0

고마워요! 나는 이것을 시도하고 업데이트 할 것이다. 리퀘스트 큐 리스너를 여러 개 사용하는 경우에 대비하여 리스너 객체와 비교하여 컨테이너가 얼마나 무거웠는지 알 수 있습니까? – Sundeep

+0

나는 당신이 무슨 뜻인지 잘 모르겠다. '@ JmsListener'는 팩토리에 의해 생성 된'DefaultMessageListenerContainer'에서 실행됩니다. 프로그래밍 방식으로 컨테이너를 만들고 POJO 리스너를'MessageListenerAdapter'에 래핑하는 것과 실질적으로 동일합니다. –