8.7. 라우팅 슬립
8.7.1. 개요
그림 8.8. “라우팅 슬립 패턴” 에 표시된 라우팅 슬립 패턴을 사용하면 일련의 처리 단계를 통해 메시지를 연속으로 라우팅할 수 있습니다. 여기서 단계 시퀀스는 설계 시 알 수 없으며 각 메시지에 따라 다를 수 있습니다. 메시지가 전달되어야 하는 끝점 목록은 런타임에 Apache Camel이 읽고 즉시 파이프라인을 구성하기 위해 런타임에 읽는 헤더 필드( 슬립)에 저장됩니다.
그림 8.8. 라우팅 슬립 패턴
![라우팅 슬립](https://access.redhat.com/webassets/avalon/d/Red_Hat_Fuse-7.12-Apache_Camel_Development_Guide-ko-KR/images/00d001f6a99e2d7909ae5cd99e248481/routing_slip.gif)
8.7.2. slip 헤더
라우팅 슬립은 사용자 정의 헤더에 나타납니다. 여기서 헤더 값은 엔드포인트 URI의 쉼표로 구분된 목록입니다. 예를 들어, 보안 작업의 시퀀스를 지정하는 라우팅 슬립은 다음과 같습니다.For example, a routing slip that specifies a sequence of security tasks finishesdecrypting, authenticating, and de-duplicating a message Cryostat- Cryostatmight look like the following:
cxf:bean:decrypt,cxf:bean:authenticate,cxf:bean:dedup
8.7.3. 현재 끝점 속성
Camel 2.5에서 라우팅 Slip는 미끄러짐에 따라 현재 엔드 포인트가 포함된 교환에 속성(Exchange.SLIP_ENDPOINT
)을 설정합니다. 이를 통해 교환이 슬립을 통해 얼마나 진행되었는지 확인할 수 있습니다.
8.7절. “라우팅 슬립” 는 사전에 슬립을 계산하므로 슬립은 한 번만 계산됩니다. slip on-the-fly 를 계산해야 하는 경우 대신 8.18절. “동적 라우터” 패턴을 사용합니다.
8.7.4. Java DSL 예
다음 경로는 direct:a
끝점에서 메시지를 가져오고 aRoutingSlipHeader
헤더에서 라우팅 슬립을 읽습니다.
from("direct:b").routingSlip("aRoutingSlipHeader");
헤더 이름을 문자열 리터럴 또는 표현식으로 지정할 수 있습니다.
routingSlip()
의 2-argument 양식을 사용하여 URI 구분자를 사용자 지정할 수도 있습니다. 다음 예제에서는 라우팅 분할에 aRoutingSlipHeader
헤더 키를 사용하는 경로를 정의하고 #
문자를 URI 구분 기호로 사용합니다.
from("direct:c").routingSlip("aRoutingSlipHeader", "#");
8.7.5. XML 구성 예
다음 예제에서는 XML로 동일한 경로를 구성하는 방법을 보여줍니다.
<camelContext id="buildRoutingSlip" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:c"/> <routingSlip uriDelimiter="#"> <headerName>aRoutingSlipHeader</headerName> </routingSlip> </route> </camelContext>
8.7.6. 잘못된 끝점 무시
8.7절. “라우팅 슬립” 에서는 8.3절. “수신자 목록” 패턴에서도 지원하는 ignoreInvalidEndpoints
를 지원합니다. 이를 사용하여 유효하지 않은 엔드포인트를 건너뛸 수 있습니다. 예를 들면 다음과 같습니다.
from("direct:a").routingSlip("myHeader").ignoreInvalidEndpoints();
Spring XML에서 이 기능은 < routingSlip
> 태그에서 ignoreInvalidEndpoints
속성을 설정하여 활성화됩니다.
<route> <from uri="direct:a"/> <routingSlip ignoreInvalidEndpoints="true"> <headerName>myHeader</headerName> </routingSlip> </route>
myHeader
에 두 개의 끝점인 direct:foo,xxx:bar
가 포함된 경우를 고려하십시오. 첫 번째 끝점이 유효하고 작동합니다. 두 번째는 유효하지 않으므로 무시됩니다. 잘못된 엔드포인트가 발생할 때마다 INFO
수준에서 Apache Camel 로그를 기록합니다.
8.7.7. 옵션
routingSlip
DSL 명령은 다음 옵션을 지원합니다.
이름 | 기본값 | 설명 |
|
| Expression에서 여러 끝점을 반환한 경우 사용되는 구분 기호입니다. |
|
| 엔드포인트 uri를 확인할 수 없는 경우 무시해야 합니다. 그렇지 않으면 Camel에서 엔드포인트 uri가 유효하지 않음을 나타내는 예외가 throw됩니다. |
|
| Camel 2.13.1/2.12.4: 라우팅 슬립에서 재사용할 생산자를 캐시하는 ProducerCache 의 캐시 크기를 구성할 수 있습니다. 기본적으로는 기본적으로 0인 기본 캐시 크기를 사용합니다. 값을 -1로 설정하면 캐시를 모두 해제할 수 있습니다. |