30. 메시징 by sh
30. Messaging
Spring 프레임 워크는 JmsTemplate
을 사용하는 JMS API의 단순화 된 사용에서 메시지를 비동기 적으로 수신하는 완전한 인프라 스트럭처에 이르기까지 메시징 시스템과의 통합을위한 광범위한 지원을 제공합니다. Spring AMQP는 'Advanced Message Queuing Protocol'과 비슷한 기능을 제공하며 Boot는 RabbitTemplate
및 RabbitMQ에 대한 자동 구성 옵션도 제공합니다. 또한 Spring Websocket에서 기본적으로 STOMP 메시징을 지원하며, Spring Boot는 시작과 초기 설정을 통해 자동 구성을 지원합니다.
30.1 JMS
javax.jms.ConnectionFactory
인터페이스는 JMS 브로커와 상호 작용하기위한 javax.jms.Connection
을 만드는 표준 방법을 제공합니다. Spring은 ConnectionFactory를 JMS와 함께 사용하기 위해 필요하지만 일반적으로 직접 사용하지 않아도되며 더 높은 수준의 메시징 추상화에 의존 할 수있습니다 (자세한 내용은 Spring Framework 참조 문서의 relevant section 참조). 또한 Spring Boot는 메시지를 보내고 받기 위해 필요한 인프라를 자동으로 구성합니다.
JMS (Java Message Service)
비동기식 메시징을 위한 표준 API.
비동기식 메시징: 어떤 애플리케이션에서 다른 에플리케이션으로 간접적으로 메시지를 보내고 응답은 기다리지 않는 통신 방식.
JMS의 핵심 개념
메시지 중개자 (Message Broker)
애플리케이션에서 메시지를 전송할 때 메시지를 건네받는 역할을 하는 것. 지정된 목적지로 확실하게 메시지를 전달하는 책임을 맡아 주므로 전송자가 바로 자신의 일로 돌아갈 수 있게 해준다.
목적지 (Destination)
30.1.1 HornetQ 지원
Spring Boot는 클래스 패스에서 HornetQ를 사용할 수 있음을 감지하면 ConnectionFactory
를 자동으로 구성 할 수 있습니다. 브로커가 있으면 내장 된 브로커가 시작되고 자동으로 구성됩니다 (mode 등록 정보가 명시 적으로 설정되지 않은 경우). 지원되는 모드는 다음과 같습니다. "embedded
" (임베디드 브로커가 필요하며 명시적으로 클래스 경로에서 브로커를 사용할 수없는 경우 오류가 발생하도록 지정하기 위해)와 netty
전송 프로토콜을 사용하여 브로커에 연결하는 "native
" 입니다. 후자가 구성되면 스프링 부트는 기본 설정으로 로컬 시스템에서 실행중인 브로커에 연결하는 ConnectionFactory
를 구성합니다.
HornetQ
멀티 프로토콜, 임베드, 고성능 클러스터 비동기 메시징 시스템을 구축할 수 있는 오픈소스 프로젝트
자바로 만들어져 있으며 JMS 보다 뛰어난 성능을 가지고 있고, POJO 기반 디자인, 고사용성, 유연한 클러스터링, 관리 측면에서 사용하기 좋다.
spring-boot-starter-hornetq
을 사용하고 있다면 기존 HornetQ 인스턴스에 연결하는 데 필요한 종속성과 JMS와 통합 할 Spring 인프라가 제공됩니다. org.hornetq:hornetq-jms-server
를 애플리케이션에 추가하면 임베디드 모드를 사용할 수있습니다.
HornetQ 구성은 spring.hornetq.*
의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어, application.properties
에 다음 섹션을 선언 할 수 있습니다.
브로커를 임베드 할 때 지속성을 사용할지 여부와 사용 가능하게 할 대상 목록을 선택할 수 있습니다. 기본 옵션을 사용하여 쉼표로 구분 된 목록으로 지정할 수 있습니다. 고급 큐 및 주제 구성 각각에 대해 org.hornetq.jms.server.config.JMSQueueConfiguration
또는 org.hornetq.jms.server.config.TopicConfiguration
유형의 Bean을 정의 할 수 있습니다.
지원되는 옵션에 대한 자세한 내용은 HornetQProperties
를 참조하십시오.
JNDI 조회가 전혀 필요하지 않으며 대상은 HornetQ 구성의 'name'속성 또는 구성을 통해 제공된 이름을 사용하여 이름에 대해 확인됩니다.
30.1.2 ActiveMQ 지원
또한 Spring Boot는 클래스 패스에서 ActiveMQ를 사용할 수 있음을 감지하면 ConnectionFactory
를 구성 할 수 있습니다. 브로커가있는 경우 포함 된 브로커가 시작되고 구성됩니다 (브로커 URL이 구성을 통해 지정되지 않은 경우).
ActiveMQ
JMS를 지원하는 클라이언트를 포함하는 브로커, 자바 뿐만 아니라 다양한 언어를 이용하는 시스템 간의 통신을 가능하게 함. 또한 클러스터링 기능 및 DB 그리고 FileSystem을 통해 각 시스템 간의 일관성 및 지속성을 유지시켜 줌.
즉, 클라이언트 간 메시지를 송수신할 수 있는 오픈 소스 Broker(JMS 서버)
ActiveMQ 구성은 spring.activemq.*
의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어, application.properties
에 다음 섹션을 선언 할 수 있습니다.
지원되는 옵션에 대해서는 ActiveMQProperties
를 참조하십시오.
기본적으로 ActiveMQ는 대상이 아직 존재하지 않는 경우 대상을 생성하므로 대상은 제공된 이름과 비교하여 확인됩니다.
30.1.3 JNDI ConnectionFactory 사용
Application Server에서 응용 프로그램을 실행중인 경우 Spring Boot는 JNDI를 사용하여 JMS ConnectionFactory
를 찾으려고 시도합니다. 기본적으로 java:/JmsXA
및 java:/XAConnectionFactory
위치가 점검됩니다. 대체 위치를 지정해야하는 경우 spring.jms.jndi-name
속성을 사용할 수 있습니다.
연결 팩토리 또는 대상과 같은 메시지 제공자에 대한 구성 정보를 얻기 위해 JNDI를 사용
30.1.4 메시지 전송
Spring의 JmsTemplate
은 자동으로 구성되므로 직접 bean에 autowire 할 수 있습니다.
JmsMessagingTemplate
(Spring 4.1의 새로운 기능)은 비슷한 방식으로 삽입 될 수 있습니다.
30.1.5 메시지 수신
JMS 인프라가 존재할 때 모든 Bean에 @JmsListener
주석을 달아 청취자 엔드 포인트를 작성할 수 있습니다. JmsListenerContainerFactory
가 정의되어 있지 않은 경우, 디폴트의 JmsListenerContainerFactory
가 자동적으로 설정됩니다.
다음 구성 요소는 someQueue
대상에 리스너 끝점을 만듭니다.
자세한 내용은 the javadoc of @EnableJms
을 확인하십시오.
Last updated
Was this helpful?