10.4. 클레임 확인 EIP
10.4.1. 클레임 확인 EIP
그림 10.4. “클레임 검사 패턴” 에 표시된 클레임 검사 EIP 패턴을 사용하면 메시지 콘텐츠를 클레임 검사(별도 키)로 교체할 수 있습니다. 클레임 검사 EIP 패턴을 사용하여 나중에 메시지 콘텐츠를 검색합니다. 메시지 콘텐츠를 데이터베이스 또는 파일 시스템과 같은 영구 저장소에 일시적으로 저장할 수 있습니다. 이 패턴은 메시지 콘텐츠가 매우 크며 모든 구성 요소에 모든 정보가 필요한 것은 아닙니다.
외부 당사자와의 정보를 신뢰할 수 없는 경우에도 유용할 수 있습니다. 이 경우 클레임 검사를 사용하여 데이터의 중요한 부분을 숨깁니다.
EIP 패턴의 Camel 구현은 메시지 콘텐츠를 내부 메모리 저장소에 일시적으로 저장합니다.
그림 10.4. 클레임 검사 패턴
10.4.1. 클레임 검사 EIP 옵션
클레임 검사 EIP는 다음 표에 나열된 옵션을 지원합니다.
이름 | 설명 | 기본 | 유형 |
작업 | 클레임 검사 작업을 사용해야 합니다. 다음 작업을 지원합니다.
*
Get , | ClaimCheckOperation | |
key | 클레임 확인에 특정 키를 사용하려면 다음을 수행합니다. | 문자열 | |
filter | 클레임 검사 리포지토리에서 다시 병합할 데이터를 제어하는 필터를 지정합니다. | 문자열 | |
strategyRef |
기본 구현 대신 사용자 정의 | 문자열 |
10.4.2. 필터 옵션
Filter
옵션을 사용하여 Get
또는 Pop
작업을 사용할 때 병합할 데이터를 정의합니다. AggregationStrategy
를 사용하여 데이터를 다시 병합합니다. 기본 전략에서는 filter 옵션을 사용하여 병합할 데이터를 쉽게 지정합니다.
filter
옵션은 다음 구문으로 String 값을 사용합니다.
-
body
: 메시지 본문을 집계하려면 -
attachments
: 모든 메시지 첨부 파일을 집계하려면 -
headers
: 모든 메시지 헤더를 집계하기 위해 -
header:pattern
: 패턴과 일치하는 모든 메시지 헤더를 집계합니다.
패턴 규칙은 와일드카드 및 정규식을 지원합니다.
-
와일드카드 일치(패턴은
*
로 끝나고 이름은 패턴으로 시작) - 정규 표현식 일치
여러 규칙을 지정하려면 쉼표
(,)로 구분합니다.
다음은 foo 로 시작하는 메시지 본문 및 모든 헤더를 포함하는 기본 필터 예제입니다.
body, header:foo*
-
메시지 본문만 병합하려면
body
-
메시지 첨부 파일만 병합하려면 다음을 수행합니다.
-
헤더만 병합하려면 헤더만 병합
-
헤더 이름
foo
only:header:foo
를 병합하려면 다음을 수행합니다.
필터 규칙을 비어 있거나 와일드카드로 지정하는 경우 모든 항목을 병합할 수 있습니다. 자세한 내용은 병합할 데이터 필터링을 참조하십시오.
데이터를 다시 병합하면 시스템은 기존 데이터를 덮어씁니다. 또한 기존 데이터를 저장합니다.
10.4.2. 포함 및 제외 패턴을 사용하여 필터 옵션
다음은 include,exclude 또는 remove 옵션을 지정하는 데 사용할 수 있는 접두사를 지원하는 구문입니다.
- + : 포함하기 (기본 모드임)
- - : 제외하려면 (포함하는 것보다 우선합니다)
- -- : 제거(제거)
예를 들면 다음과 같습니다.
-
메시지 본문을 건너뛰고 다른 모든 것을 병합하려면
-body
를 사용합니다. -
메시지 헤더
foo
를 건너뛰고 다른 모든 것을 병합하려면-header:foo
를 사용합니다.
데이터를 병합할 때 헤더를 제거하도록 시스템에 지시할 수도 있습니다. 예를 들어 bar로 시작하는 모든 헤더를 제거하려면 --headers:bar*
를 사용합니다.
include(+)와 exclude(-) header:pattern
을 동시에 사용하지 마십시오.
10.4.3. Java 예
다음 예제에서는 Push
및 Pop
작업 작동을 보여 줍니다.The following example shows the Push and pop operations in action:
from("direct:start") .to("mock:a") .claimCheck(ClaimCheckOperation.Push) .transform().constant("Bye World") .to("mock:b") .claimCheck(ClaimCheckOperation.Pop) .to("mock:c");
다음은 Get
및 Set
작업을 사용하는 예입니다. 예에서는 foo
키를 사용합니다.
from("direct:start") .to("mock:a") .claimCheck(ClaimCheckOperation.Set, "foo") .transform().constant("Bye World") .to("mock:b") .claimCheck(ClaimCheckOperation.Get, "foo") .to("mock:c") .transform().constant("Hi World") .to("mock:d") .claimCheck(ClaimCheckOperation.Get, "foo") .to("mock:e");
데이터를 제거하지 않기 때문에 Get
작업을 사용하여 동일한 데이터를 두 번 가져올 수 있습니다. 그러나 데이터를 한 번만 가져오려면 GetAndRemove
작업을 사용합니다.
다음 예제에서는 foo
또는 bar
로 헤더만 반환하려는 filter
옵션을 사용하는 방법을 보여줍니다.
from("direct:start") .to("mock:a") .claimCheck(ClaimCheckOperation.Push) .transform().constant("Bye World") .setHeader("foo", constant(456)) .removeHeader("bar") .to("mock:b") // only merge in the message headers foo or bar .claimCheck(ClaimCheckOperation.Pop, null, "header:(foo|bar)") .to("mock:c");
10.4.4. XML 예
다음 예제에서는 푸시
및 팝업
작업을 보여줍니다.
<route> <from uri="direct:start"/> <to uri="mock:a"/> <claimCheck operation="Push"/> <transform> <constant>Bye World</constant> </transform> <to uri="mock:b"/> <claimCheck operation="Pop"/> <to uri="mock:c"/> </route>
다음은 Get
및 Set
작업을 사용하는 예입니다. 예에서는 foo
키를 사용합니다.
<route> <from uri="direct:start"/> <to uri="mock:a"/> <claimCheck operation="Set" key="foo"/> <transform> <constant>Bye World</constant> </transform> <to uri="mock:b"/> <claimCheck operation="Get" key="foo"/> <to uri="mock:c"/> <transform> <constant>Hi World</constant> </transform> <to uri="mock:d"/> <claimCheck operation="Get" key="foo"/> <to uri="mock:e"/> </route>
데이터를 제거하지 않기 때문에 Get
작업을 사용하여 동일한 데이터를 두 번 가져올 수 있습니다. 그러나 데이터를 한 번 가져오려면 GetAndRemove
작업을 사용할 수 있습니다.
다음 예제에서는 filter
옵션을 사용하여 헤더를 foo
또는 bar
로 가져오는 방법을 보여줍니다.
<route> <from uri="direct:start"/> <to uri="mock:a"/> <claimCheck operation="Push"/> <transform> <constant>Bye World</constant> </transform> <setHeader headerName="foo"> <constant>456</constant> </setHeader> <removeHeader headerName="bar"/> <to uri="mock:b"/> <!-- only merge in the message headers foo or bar --> <claimCheck operation="Pop" filter="header:(foo|bar)"/> <to uri="mock:c"/> </route>