11.5. 메시지 Dispatcher

11.5.1. 개요

그림 11.4. “메시지 Dispatcher 패턴” 에 표시된 메시지 디스패처 패턴은 채널에서 메시지를 소비한 다음 로컬로 메시지를 처리하는 작업자에 로컬로 배포하는 데 사용됩니다. Apache Camel 애플리케이션에서 수행자는 일반적으로 경로의 다른 섹션으로 메시지를 전송하는 데 사용되는 프로세스 내 엔드포인트로 표시됩니다.

그림 11.4. 메시지 Dispatcher 패턴

메시지 디스패처 패턴

다음 방법 중 하나를 사용하여 Apache Camel에서 메시지 디스패치 패턴을 구현할 수 있습니다.

11.5.2. JMS 선택기

애플리케이션이 JMS 대기열의 메시지를 사용하는 경우 JMS 선택기 를 사용하여 메시지 디스패처 패턴을 구현할 수 있습니다. JMS 선택기는 JMS 헤더 및 JMS 속성을 포함하는 서술자 표현식입니다. 선택기가 true 로 평가되면 JMS 메시지가 소비자에 도달할 수 있으며 선택기가 false 로 평가되면 JMS 메시지가 차단됩니다. 많은 측면에서 JMS 선택기는 8.2절. “메시지 필터” 와 유사하지만 JMS 공급자 내에서 필터링이 구현되는 추가 이점이 있습니다. 즉, JMS 선택기는 Apache Camel 애플리케이션으로 전송되기 전에 메시지를 차단할 수 있습니다. 이는 상당한 효율성 이점을 제공합니다.

Apache Camel에서는 JMS 엔드포인트 URI에 선택기 쿼리 옵션을 설정하여 소비자 끝점에 JMS 선택기 를 정의할 수 있습니다. 예를 들면 다음과 같습니다.

from("jms:dispatcher?selector=CountryCode='US'").to("cxf:bean:replica01");
from("jms:dispatcher?selector=CountryCode='IE'").to("cxf:bean:replica02");
from("jms:dispatcher?selector=CountryCode='DE'").to("cxf:bean:replica03");

선택기 문자열에 표시되는 서술자는 SQL92 조건부 표현식 구문의 하위 집합을 기반으로 합니다(전체 세부 사항은 JMS 사양참조). 선택기 문자열에 나타나는 식별자는 JMS 헤더 또는 JMS 속성을 참조할 수 있습니다. 예를 들어 이전 경로에서 발신자는 Cryostat Code 라는 JMS 속성을 설정합니다.

Apache Camel 애플리케이션 내에서 메시지에 JMS 속성을 추가하려면 메시지 헤더(메시지 내 또는 외부 메시지)를 설정하여 이를 수행할 수 있습니다. JMS 엔드포인트를 읽거나 쓸 때 Apache Camel은 JMS 헤더 및 JMS 속성을 기본 메시지 헤더에 매핑합니다.

기술적으로 선택기 문자열은 application/x-www-form-urlencoded MIME 형식에 따라 인코딩된 URL이어야 합니다(html 사양참조). 실제로 & (ampersand) 문자는 URI에서 각 쿼리 옵션을 구분하는 데 사용되므로 문제가 발생할 수 있습니다. & amp; 문자를 포함해야 하는 복잡한 선택기 문자열의 경우 java.net.URLEncoder 유틸리티 클래스를 사용하여 문자열을 인코딩할 수 있습니다. 예를 들면 다음과 같습니다.

from("jms:dispatcher?selector=" + java.net.URLEncoder.encode("CountryCode='US'","UTF-8")).
    to("cxf:bean:replica01");

UTF-8 인코딩을 사용해야 하는 위치.

11.5.3. ActiveMQ의 JMS 선택기

ActiveMQ 엔드포인트에 JMS 선택기를 정의할 수도 있습니다. 예를 들면 다음과 같습니다.

from("activemq:dispatcher?selector=CountryCode='US'").to("cxf:bean:replica01");
from("activemq:dispatcher?selector=CountryCode='IE'").to("cxf:bean:replica02");
from("activemq:dispatcher?selector=CountryCode='DE'").to("cxf:bean:replica03");

자세한 내용은 ActiveMQ: JMS SelectorsActiveMQ Message Properties 를 참조하십시오.

11.5.4. 콘텐츠 기반 라우터

콘텐츠 기반 라우터 패턴과 메시지 디스패처 패턴의 근본적인 차이점은 콘텐츠 기반 라우터가 물리적으로 분리된 대상(원격 끝점)에 메시지를 디스패치하고 메시지 디스패처가 동일한 프로세스 공간 내에서 로컬로 메시지를 디스패치한다는 것입니다. Apache Camel에서 이러한 두 패턴 간의 차이점은 대상 엔드포인트에 따라 결정됩니다. 동일한 라우터 논리는 콘텐츠 기반 라우터와 메시지 디스패처를 모두 구현하는 데 사용됩니다. 대상 끝점이 원격인 경우 경로는 콘텐츠 기반 라우터를 정의합니다. 대상 끝점이 프로세스 중이면 경로는 메시지 디스패처를 정의합니다.

콘텐츠 기반 라우터 패턴을 사용하는 방법에 대한 자세한 내용 및 예제는 8.1절. “콘텐츠 기반 라우터” 에서 참조하십시오.