6.4. 보장된 제공

6.4.1. 개요

보장된 전달 은 메시지가 메시지 채널에 배치되면 메시징 시스템은 애플리케이션의 일부가 실패하더라도 메시지가 해당 대상에 도달할 것임을 보장합니다. 일반적으로 메시징 시스템은 대상에 전달하기 전에 영구 스토리지에 메시지를 작성하여 그림 6.4. “보장된 제공 패턴” 에 표시된 보장된 전달 패턴을 구현합니다.

그림 6.4. 보장된 제공 패턴

보장된 제공 패턴

6.4.2. 보장된 전달을 지원하는 구성 요소

다음 Apache Camel 구성 요소는 보장된 제공 패턴을 지원합니다.

6.4.3. JMS

JMS에서 deliveryPersistent 쿼리 옵션은 메시지의 영구 스토리지가 활성화되었는지 여부를 나타냅니다. 기본 동작은 영구 전달을 활성화하는 것이므로 일반적으로 이 옵션을 설정할 필요가 없습니다. 보장된 제공의 모든 세부 사항을 구성하려면 JMS 공급자에서 구성 옵션을 설정해야 합니다. 이러한 세부 사항은 사용 중인 JMS 공급자에 따라 다릅니다. 예를 들어 MQSeries, TibCo, BEA, Sonic 등은 모두 보장된 전달을 지원하기 위해 다양한 서비스를 제공합니다.

자세한 내용은 Apache Camel 구성 요소 참조 가이드>에서 Jms 를 참조하십시오.

6.4.4. ActiveMQ

ActiveMQ에서는 메시지 지속성이 기본적으로 활성화됩니다. 버전 5 이후의 ActiveMQ는 AMQ 메시지 저장소를 기본 지속성 메커니즘으로 사용합니다. ActiveMQ에서 메시지 지속성을 전달하는 데 사용할 수 있는 몇 가지 다른 방법이 있습니다.

가장 간단한 옵션( 그림 6.4. “보장된 제공 패턴”와 다름)은 중앙 브로커에서 지속성을 활성화한 다음 신뢰할 수 있는 프로토콜을 사용하여 해당 브로커에 연결하는 것입니다. 메시지를 중앙 브로커로 보낸 후에는 소비자에게 전달이 보장됩니다. 예를 들어 Apache Camel 구성 파일 META-INF/spring/camel-context.xml 에서는 다음과 같이 OpenWire/TCP 프로토콜을 사용하여 중앙 브로커에 연결하도록 ActiveMQ 구성 요소를 구성할 수 있습니다.

<beans ... >
  ...
  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
  </bean>
  ...
</beans>

메시지가 원격 끝점( 그림 6.4. “보장된 제공 패턴”과 유사)으로 전송되기 전에 로컬로 저장되는 아키텍처를 구현하려는 경우 Apache Camel 애플리케이션에 포함된 브로커를 인스턴스화하여 이 작업을 수행합니다. 이를 달성하는 간단한 방법은 다른 피어 끝점과 통신하기 위해 암시적으로 포함된 브로커를 생성하는 ActiveMQ Peer-to-Peer 프로토콜을 사용하는 것입니다. 예를 들어 camel-context.xml 구성 파일에서 다음과 같이 그룹 GroupA 의 모든 피어에 연결하도록 ActiveMQ 구성 요소를 구성할 수 있습니다.

<beans ... >
  ...
  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="peer://GroupA/broker1"/>
  </bean>
  ...
</beans>

여기서 broker1 은 포함된 브로커의 브로커 이름입니다(그룹의 다른 피어는 다른 브로커 이름을 사용해야 함). Peer-to-Peer 프로토콜의 한 가지 제한 기능은 IP 멀티캐스트를 사용하여 해당 그룹의 다른 피어를 찾는 것입니다. 이를 통해 광범위한 영역 네트워크(및 IP 멀티 캐스트가 활성화되지 않은 일부 로컬 영역 네트워크)에서 사용하는 것은 적절하지 않습니다.

ActiveMQ 구성 요소에 포함된 브로커를 생성하는 보다 유연한 방법은 포함된 브로커 인스턴스에 연결하는 ActiveMQ의 VM 프로토콜을 활용하는 것입니다. 필요한 이름의 브로커가 없으면 VM 프로토콜이 자동으로 생성됩니다. 이 메커니즘을 사용하여 사용자 지정 구성으로 포함된 브로커를 생성할 수 있습니다. 예를 들면 다음과 같습니다.

<beans ... >
  ...
  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="vm://broker1?brokerConfig=xbean:activemq.xml"/>
  </bean>
  ...
</beans>

여기서 activemq.xml 은 포함된 브로커 인스턴스를 구성하는 ActiveMQ 파일입니다. ActiveMQ 구성 파일 내에서 다음 지속성 메커니즘 중 하나를 활성화하도록 선택할 수 있습니다.

  • AMQ 지속성(기본값) Cryo stat- Cryostat ActiveMQ에 고유하는 빠르고 신뢰할 수 있는 메시지 저장소입니다. 자세한 내용은 amqPersistenceAdapterAMQ Message Store 를 참조하십시오.
  • JDBC 지속성 Cryostat- Cryostat는 JDBC와 호환되는 모든 데이터베이스에 메시지를 저장하기 위해 JDBC를 사용합니다. 자세한 내용은 jdbcPersistenceAdapterActiveMQ 지속성 을 참조하십시오.
  • 저널 지속성 - 롤링 로그 파일에 메시지를 저장하는 빠른 지속성 메커니즘입니다. 자세한 내용은 journalPersistenceAdapterActiveMQ 지속성 을 참조하십시오.
  • KAHA 지속성 관계 - ActiveMQ를 위해 특별히 개발된 지속성 메커니즘. 자세한 내용은 kahaPersistenceAdapterActiveMQ 지속성 을 참조하십시오.

자세한 내용은 Apache Camel 구성 요소 참조 가이드ActiveMQ 를 참조하십시오.

6.4.5. ActiveMQ Journal

ActiveMQ Journal 구성 요소는 여러 동시 생산자가 대기열에 메시지를 작성하지만 활성 소비자가 하나만 있는 특수 사용 사례에 최적화되어 있습니다. 메시지는 롤링 로그 파일에 저장되고 동시 쓰기는 효율성을 높이기 위해 집계됩니다.