복붙노트

[SPRING] Spring - JMSTemplates를 동적으로 생성한다.

SPRING

Spring - JMSTemplates를 동적으로 생성한다.

나는 Spring 부트를 사용하고 있으며, 여러 JMS 인스턴스에 연결하기 위해 여러 JMS 템플릿을 동적으로 만들고 싶다. ConnectionFactory를 JMSTemplate에 연결하여 주석을 사용하는 표준 접근 방식에 대해 알고 있습니다. 서로 다른 JMS 인스턴스에 대해 서로 다른 JMSTemplate을 기대합니다.

현재 맵에로드 된 연결 세부 정보가 있습니다. 각 키에 대해 JMSTemplate을 동적으로 만들고 싶습니다.

주요 목적은지도 조회를 기반으로 주제 대상에 메시지를 게시하는 것입니다. 그러나 테스트를 위해 청취자도있을 수 있습니다.

잠재적 접근 방식 :

1) SpringTemplates를 Spring 구성 요소와 연관된 맵에 추가하고 SpringTemplate에서 SpringTemplate을 조회합니다.

2) 다음을 사용하여 여러 jmsTemplate 빈을 동적으로 등록하는 방법은?

BeanDefinitionBuilder 빌더 = BeanDefinitionBuilder.rootBeanDefinition (JmsTemplate.class);             CachingConnectionFactory cachingConnectionFactory = 새 CachingConnectionFactory ();

         builder.addPropertyValue("connectionFactory", cachingConnectionFactory);      // set property value
        DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getAutowireCapableBeanFactory();
        factory.registerBeanDefinition("jmsTemplateName", builder.getBeanDefinition());

그런 다음 jms bean -> ctx.getBean ( "jmsTemplateName");

어떤 접근 방식이 유리한가요?

제발 조언.

해결법

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

    1.따라서 맵에 ConnectionFactory 객체가 있다면 JmsTemplates의 비슷한 맵을 생성 할 수 있습니다. 이 JmsTempalte 컨스트럭터를 사용하고 하나의 루프 (또는 스트림) 이후에 JmsTemplates의 맵을 가질 수 있습니다. 그래서 보내는 것이 쉽습니다.

    따라서 맵에 ConnectionFactory 객체가 있다면 JmsTemplates의 비슷한 맵을 생성 할 수 있습니다. 이 JmsTempalte 컨스트럭터를 사용하고 하나의 루프 (또는 스트림) 이후에 JmsTemplates의 맵을 가질 수 있습니다. 그래서 보내는 것이 쉽습니다.

    더 힘든 부분은 청취자가 될 것입니다. 동적 대상이있는 경우 리스너 주석 (@JmsListener)을 잊어 버릴 필요가 있습니다. DefaultMessageListenerContainer의 맵을 작성하여 작동하게 할 수 있습니다.

    각 컨테이너는 다음과 같이 생성됩니다.

    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
    container.setConnectionFactory(connectionFactory);
    container.setDestination(topic);
    container.setMessageListener(listenerInstance);
    container.start();
    

    stop, shutdown, ....을 통해 각 리스너 컨테이너의 수명주기를 제어 할 수도 있습니다.

    그러나이 방법으로 많은 대기열을 처리하는 것은 자원 집약적 일 수 있음을 명심하십시오. 또한 아마도 여러분 스스로 자원을 닫는 것에 대해 신경 써야 할 것입니다 (Spring은 여러분을 위해 그것을하지 않을 것입니다).

  2. from https://stackoverflow.com/questions/32332840/spring-dynamically-create-jmstemplates by cc-by-sa and MIT license