복붙노트

[SPRING] 동적 인 Listener 수 추가 (Spring JMS)

SPRING

동적 인 Listener 수 추가 (Spring JMS)

application.properties 파일에서 언급 한 것처럼 여러 리스너를 추가해야한다는 요구 사항이 있습니다. 아래처럼,

InTopics=Sample.QUT4,Sample.T05,Sample.T01,Sample.JT7

참고 :이 숫자는 더 많거나 적을 수 있습니다.

배열로 가져올 생각입니다.

@Value("${InTopics}")
private String[] inTopics;

하지만 배열에서 여러 수신기를 만드는 방법을 모르겠습니다.

현재, 하나의 주제에 대해 나는 아래에서와 같이하고 있습니다.

@Configuration
@EnableJms
public class JmsConfiguration {

@Value("${BrokerURL}")
private String brokerURL;

@Value("${BrokerUserName}")
private String brokerUserName;

@Value("${BrokerPassword}")
private String brokerPassword;

@Bean
TopicConnectionFactory connectionFactory() throws JMSException {
    TopicConnectionFactory connectionFactory = new TopicConnectionFactory(brokerURL, brokerUserName, brokerPassword);
    return connectionFactory;
}

@Bean
JmsListenerContainerFactory<?> jmsContainerFactory(TopicConnectionFactory connectionFactory) throws JMSException {
    SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setPubSubDomain(Boolean.TRUE);
    return factory;
 }

}

그리고 내 리스너,

@JmsListener(destination = "${SingleTopicName}", containerFactory = "jmsContainerFactory")
public void receiveMessage(Message msg) {
   //Do Some Stuff
}

내가 이걸 얻을 수있는 방법이 있니?

해결법

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

    1.주석이 붙은 @JmsListeners로는이 작업을 수행 할 수 없지만 참조 문서에 설명 된대로 JmsListenerConfigurer를 확장하여 프로그래밍 방식으로 각 수신기를 등록 할 수 있습니다.

    주석이 붙은 @JmsListeners로는이 작업을 수행 할 수 없지만 참조 문서에 설명 된대로 JmsListenerConfigurer를 확장하여 프로그래밍 방식으로 각 수신기를 등록 할 수 있습니다.

    편집하다

    당신이 배열로서 속성을 주입하고 있기 때문에 ...

    @Value("${InTopics}")
    private String[] inTopics;
    

    Spring은 목록을 나눠서 목록의 대기열 수를 기반으로 배열을 만듭니다.

    그런 다음 JmsListenerConfigurer.configureJmsListeners ()에서 배열을 반복하고 배열의 각 요소에 대한 끝점을 만들 수 있습니다. 미리 배열의 크기를 알 필요는 없습니다.

    for (String inTopic : inTopics) {
        ...
    }
    
  2. from https://stackoverflow.com/questions/34063230/adding-dynamic-number-of-listenersspring-jms by cc-by-sa and MIT license