5.5. 메시지 라우터

5.5.1. 개요

그림 5.7. “메시지 라우터 패턴” 에 표시된 메시지 라우터 는 단일 소비자 끝점의 메시지를 사용하고 특정 의사 결정 기준에 따라 적절한 대상 끝점으로 리디렉션하는 필터 유형입니다. 메시지 라우터는 메시지를 리디렉션하는 데만 관련이 있습니다. 메시지 내용은 수정되지 않습니다.

그러나 기본적으로 Camel이 메시지 교환을 수신자 엔드포인트로 라우팅할 때마다 원본 교환 오브젝트의 단순 복사본입니다. 부분 복사에서는 메시지 본문, 헤더 및 첨부 파일과 같은 원래 교환의 요소는 참조용으로만 복사됩니다. Camel은 리소스를 재사용하는 단순 복사본을 전송하여 성능을 위해 최적화합니다. 그러나 이러한 부분 사본이 모두 연결되어 있기 때문에 Camel이 메시지를 여러 끝점으로 라우팅하는 경우 장단점은 다른 수신자로 라우팅되는 사본에 사용자 정의 논리를 적용할 수 있다는 것입니다. Camel에서 고유한 버전의 메시지를 다른 엔드포인트로 라우팅하는 방법에 대한 자세한 내용은 "계속 메시지에 사용자 정의 처리"를 참조하십시오.

그림 5.7. 메시지 라우터 패턴

메시지 라우터 패턴

메시지 라우터는 choose () 프로세서를 사용하여 Apache Camel에서 쉽게 구현할 수 있습니다. 여기서 각 대체 대상 끝점은 when() 하위 옵션을 사용하여 선택할 수 있습니다(선택 프로세서에 대한 자세한 내용은 1.5절. “프로세서”참조).

5.5.2. Java DSL 예

다음 Java DSL 예제에서는 foo 헤더의 콘텐츠에 따라 세 가지 대체 대상( seda:a,seda:b 또는 seda:c)으로 메시지를 라우팅하는 방법을 보여줍니다.

from("seda:a").choice()
    .when(header("foo").isEqualTo("bar")).to("seda:b")
    .when(header("foo").isEqualTo("cheese")).to("seda:c")
    .otherwise().to("seda:d");

5.5.3. XML 구성 예

다음 예제에서는 XML로 동일한 경로를 구성하는 방법을 보여줍니다.

<camelContext id="buildSimpleRouteWithChoice" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="seda:a"/>
    <choice>
      <when>
        <xpath>$foo = 'bar'</xpath>
        <to uri="seda:b"/>
      </when>
      <when>
        <xpath>$foo = 'cheese'</xpath>
        <to uri="seda:c"/>
      </when>
      <otherwise>
        <to uri="seda:d"/>
      </otherwise>
    </choice>
  </route>
</camelContext>

5.5.4. 그렇지 않은 경우 선택

otherwise() 절 없이 choice() 을 사용하면 일치하지 않는 교환이 기본적으로 삭제됩니다.