5.4. 파이프 및 필터

5.4.1. 개요

그림 5.4. “파이프 및 필터 패턴” 에 표시된 파이프 및 필터 패턴은 필터 체인을 생성하여 경로를 구성하는 방법을 설명합니다. 여기서 하나의 필터 출력은 파이프라인의 다음 필터 입력에 제공됩니다(UNIX 파이프 명령과 분석). 파이프라인 접근 방식의 장점은 보다 복잡한 메시지 처리를 생성하기 위해 서비스( Apache Camel 애플리케이션 외부에 있을 수 있는 서비스)를 구성할 수 있다는 점입니다.

그림 5.4. 파이프 및 필터 패턴

파이프 및 필터 패턴

5.4.2. InOut 교환 패턴의 파이프라인

일반적으로 파이프라인의 모든 끝점에는 입력(in message) 및 출력(Out 메시지)이 있으며 이는 In Out 메시지 교환 패턴과 호환됨을 의미합니다. InOut 파이프라인을 통한 일반적인 메시지 흐름은 그림 5.5. “InOut Exchanges용 파이프라인” 에 표시됩니다.

그림 5.5. InOut Exchanges용 파이프라인

InOut 교환을 위한 파이프 라인

파이프라인은 각 끝점의 출력을 다음 끝점의 입력에 연결합니다. 최종 끝점의 아웃 메시지는 원래 호출자로 다시 전송됩니다. 다음과 같이 이 파이프라인의 경로를 정의할 수 있습니다.

from("jms:RawOrders").pipeline("cxf:bean:decrypt", "cxf:bean:authenticate", "cxf:bean:dedup", "jms:CleanOrders");

다음과 같이 XML로 동일한 경로를 구성할 수 있습니다.

<camelContext id="buildPipeline" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="jms:RawOrders"/>
    <to uri="cxf:bean:decrypt"/>
    <to uri="cxf:bean:authenticate"/>
    <to uri="cxf:bean:dedup"/>
    <to uri="jms:CleanOrders"/>
  </route>
</camelContext>

XML에는 전용 파이프라인 요소가 없습니다. 앞에 있는 요소와 요소 간의 결합은 파이프라인과 의미적으로 동일합니다. “pipeline() 및 to() DSL 명령 비교”을 참조하십시오.

5.4.3. InOnly 및 RobustInOnly 교환 패턴의 파이프라인

파이프라인의 끝점에서 사용 가능한 Out 메시지( InOnlyRobustInOnly 교환 패턴의 경우)가 없는 경우 파이프라인을 일반적인 방식으로 연결할 수 없습니다. 이 특별한 경우 그림 5.6. “InOnly 교환을 위한 파이프라인” 에 표시된 것처럼 파이프라인은 원래 In 메시지 사본을 파이프라인의 각 끝점에 전달하여 구성됩니다. 이 유형의 파이프라인은 고정 대상이 있는 수신자 목록과 동일합니다( 8.3절. “수신자 목록”참조).

그림 5.6. InOnly 교환을 위한 파이프라인

InOnly 교환을 위한 파이프 라인

이 파이프라인의 경로는 InOut 파이프라인(Java DSL 또는 XML)과 동일한 구문을 사용하여 정의됩니다.

5.4.4. pipeline() 및 to() DSL 명령 비교

Java DSL에서는 다음 구문 중 하나를 사용하여 파이프라인 경로를 정의할 수 있습니다.

  • pipeline() 프로세서 명령 Cryo stat- Cryostat를 사용하여 파이프라인 프로세서를 사용하여 다음과 같이 파이프라인 경로를 구성합니다.

    from(SourceURI).pipeline(FilterA, FilterB, TargetURI);
  • to() 명령을 사용하여 다음과 같이 to() 명령을 사용하여 파이프라인 경로를 구성합니다.

    from(SourceURI).to(FilterA, FilterB, TargetURI);

    또는 동등한 구문을 사용할 수 있습니다.

    from(SourceURI).to(FilterA).to(FilterB).to(TargetURI);

파이프라인 프로세서와 항상 동일하지 않기 때문에 to() 명령 구문을 사용할 때는 주의하십시오. Java DSL에서 to() 의 의미는 경로의 이전 명령으로 수정할 수 있습니다. 예를 들어 multicast() 명령이 to() 명령 앞에 있을 때 파이프라인 패턴 대신 나열된 끝점을 멀티 캐스트 패턴에 바인딩합니다( 8.13절. “멀티 캐스트”참조).