34.1 JMS by sh
javax.jms.ConnectionFactory 인터페이스는 JMS 브로커와 상호 작용하기 위한 javax.jms.Connection을 만드는 표준 방법을 제공합니다. Spring은 JMS와 연동하기 위해 ConnectionFactory가 필요하지만 일반적으로 직접 사용하지 않아도 되며 상위 수준의 메시징 추상화에 의존 할 수있습니다. (자세한 내용은 Spring Framework 참조 문서의 therelevant section을 참조하십시오.) Spring Boot는 또한 메시지를 보내고 받기 위해 필요한 인프라를 자동으로 구성합니다.
34.1.1 ActiveMQ 지원

classpath에서 ActiveMQ를 사용할 수 있으면, Spring Boot는 ConnectionFactory를 설정할 수도 있습니다. 브로커가 있으면 내장 브로커가 자동으로 시작되고 구성됩니다 (구성을 통해 브로커 URL을 지정하지 않은 경우).
![[Note]](https://wannaqueen.gitbook.io/spring5/~gitbook/image?url=https%3A%2F%2Fdocs.spring.io%2Fspring-boot%2Fdocs%2Fcurrent%2Freference%2Fhtmlsingle%2Fimages%2Fnote.png&width=300&dpr=4&quality=100&sign=e1be9d3c&sv=2)
spring-boot-starter-activemq를 사용하면 JMS와 통합할 Spring 인프라와 마찬가지로 ActiveMQ 인스턴스를 연결하거나 포함시키는 데 필요한 종속성이 제공됩니다.
ActiveMQ 구성은 spring.activemq.*의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어 다음 섹션을 application.properties로 선언 할 수 있습니다.
기본적으로 CachingConnectionFactory는 고유한 ConnectionFactory를 외부 구성 속성들에 의해 spring.jms.*로 제어 할 수있는 적절한 설정으로 래핑합니다.
네이티브 풀링을 사용하려면 다음 예제와 같이 org.messaginghub:pooled-jms에 종속성을 추가하고 JmsPoolConnectionFactory를 구성하여 그렇게 할 수 있습니다
![[Tip]](https://wannaqueen.gitbook.io/spring5/~gitbook/image?url=https%3A%2F%2Fdocs.spring.io%2Fspring-boot%2Fdocs%2Fcurrent%2Freference%2Fhtmlsingle%2Fimages%2Ftip.png&width=300&dpr=4&quality=100&sign=e19e9545&sv=2)
지원되는 옵션에 대해서는 ActiveMQProperties를 참조하십시오. 고급 사용자 정의를 위해 ActiveMQConnectionFactoryCustomizer를 구현하는 임의의 수의 Bean을 등록 할 수도 있습니다.
기본적으로 ActiveMQ는 목적지가 아직 존재하지 않는 경우 목적지를 작성하여 목적지가 제공된 이름에 대해 해석되도록합니다.
34.1.2 Artemis 지원
Spring Boot는 클래스 패스에서 Artemis를 사용할 수 있음을 감지하면 ConnectionFactory를 자동으로 구성 할 수 있습니다. 브로커가 있으면 내장 된 브로커가 자동으로 시작되고 구성됩니다 (mode 등록 정보가 명시적으로 설정되어 있지 않은 경우). 지원되는 모드는 embedded(내장된 브로커가 필요하며 브로커를 클래스 경로에서 사용할 수 없는 경우 오류가 발생하도록 명시하는)와 native(netty전송 프로토콜을 사용하여 브로커에 연결하는)입니다. 후자가 구성되면 스프링 부트는 기본 설정으로 로컬 시스템에서 실행 중인 브로커에 연결하는 ConnectionFactory를 구성합니다.
![[Note]](https://wannaqueen.gitbook.io/spring5/~gitbook/image?url=https%3A%2F%2Fdocs.spring.io%2Fspring-boot%2Fdocs%2Fcurrent%2Freference%2Fhtmlsingle%2Fimages%2Fnote.png&width=300&dpr=4&quality=100&sign=e1be9d3c&sv=2)
spring-boot-starter-artemis를 사용하면 JMS와 통합 할 Spring 인프라뿐만 아니라 기존 Artemis 인스턴스에 연결하는 데 필요한 종속성이 제공됩니다. 애플리케이션에 org.apache.activemq:artemis-jms-server를 추가하면 임베디드 모드를 사용할 수 있습니다.
Artemis 구성은 spring.artemis.*의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어 다음 섹션을 application.properties로 선언 할 수 있습니다.
브로커를 임베드 할 때 지속성을 활성화 할 것인지 선택할 수 있으며 사용 가능하게 할 대상을 나열 할 수 있습니다. 이것들은 쉼표로 구분 된 목록으로 지정하여 기본 옵션으로 만들거나 org.apache.activemq.artemis.jms.server.config.JMSQueueConfiguration 또는 org.apache.activemq.artemis.jms.server.config.TopicConfiguration타입의 bean을 정의 할 수 있습니다. 이것들은 각각 고급 큐 및 주제 구성 각각에 대해 설명합니다.
기본적으로 CachingConnectionFactory는 고유 한 ConnectionFactory를 외부 구성 등록 정보 인 spring.jms.*로 제어 할 수있는 적절한 설정으로 래핑합니다.
네이티브 풀링을 사용하려면 다음 예제와 같이 org.messaginghub:pooled-jms에 종속성을 추가하고 JmsPoolConnectionFactory를 구성하여 그렇게 할 수 있습니다.
지원되는 옵션에 대해서는 ArtemisProperties를 참조하십시오.
JNDI 조회가 필요 없으며 대상은 Artemis 구성의 name속성 또는 구성을 통해 제공된 이름을 사용하여 이름에 대해 확인됩니다.
34.1.3 JNDI ConnectionFactory 사용
응용 프로그램 서버에서 응용 프로그램을 실행하는 경우 Spring Boot는 JNDI를 사용하여 JMS ConnectionFactory를 찾으려고 시도합니다. 기본적으로 java:/JmsXA 및 java:/XAConnectionFactory 위치가 검사됩니다. 다음 예제와 같이 대체 위치를 지정해야하는 경우 spring.jms.jndi-name 등록 정보를 사용할 수 있습니다.
34.1.4 메시지 전송
Spring의 JmsTemplate은 자동으로 구성되어 있으므로 다음 예제와 같이 직접 bean에 autowire 할 수 있습니다.
![[Note]](https://wannaqueen.gitbook.io/spring5/~gitbook/image?url=https%3A%2F%2Fdocs.spring.io%2Fspring-boot%2Fdocs%2Fcurrent%2Freference%2Fhtmlsingle%2Fimages%2Fnote.png&width=300&dpr=4&quality=100&sign=e1be9d3c&sv=2)
JmsMessagingTemplate도 비슷한 방식으로 주입 할 수 있습니다. DestinationResolver또는 MessageConverterbean이 정의되면 자동 구성된 JmsTemplate에 자동으로 연관됩니다.
34.1.5 메시지 수신
JMS 인프라가 존재할 때 모든 Bean에 @JmsListener주석을 달아 리스너 엔드 포인트를 작성할 수 있습니다. JmsListenerContainerFactory가 정의되어 있지 않은 경우, 디폴트의 JmsListenerContainerFactory가 자동적으로 설정됩니다. DestinationResolver또는 MessageConverterbean이 정의되면, 디폴트 팩토리에 자동으로 연관됩니다.
기본적으로 기본 팩토리는 트랜잭션입니다. JtaTransactionManager가있는 인프라에서 실행하면 기본적으로 리스너 컨테이너에 연결됩니다. 그렇지 않으면 sessionTransacted플래그가 사용됩니다. 후자의 경우 리스너 메소드 (또는 그 대리자)에 @Transactional을 추가하여 로컬 데이터 저장소 트랜잭션을 수신 메시지 처리에 연결할 수 있습니다. 이렇게하면 로컬 트랜잭션이 완료되면 수신 메시지가 확인됩니다. 여기에는 동일한 JMS 세션에서 수행 된 응답 메시지를 보내는 작업도 포함됩니다.
다음 구성 요소는 someQueue대상에 리스너 끝점을 만듭니다.
![[Tip]](https://wannaqueen.gitbook.io/spring5/~gitbook/image?url=https%3A%2F%2Fdocs.spring.io%2Fspring-boot%2Fdocs%2Fcurrent%2Freference%2Fhtmlsingle%2Fimages%2Ftip.png&width=300&dpr=4&quality=100&sign=e19e9545&sv=2)
자세한 내용은 the Javadoc of @EnableJms을 참조하십시오.
더 많은 JmsListenerContainerFactory인스턴스를 생성해야하거나 기본값을 덮어 쓰려면 Spring Boot는 자동 구성 된 것과 동일한 설정으로 DefaultJmsListenerContainerFactory를 초기화하는 데 사용할 수있는 aDefaultJmsListenerContainerFactoryConfigurer를 제공합니다.
예를 들어, 다음 예제는 특정 MessageConverter를 사용하는 다른 팩토리를 노출합니다.
다음과 같이 @JmsListener-annotated 메서드에서 팩토리를 사용할 수 있습니다.
Last updated
Was this helpful?