10.4. 클레임 확인 EIP
10.4.1. 클레임 확인 EIP
그림 10.4. “클레임 검사 패턴” 에 표시된 클레임 검사 EIP 패턴을 사용하면 메시지 콘텐츠를 클레임 검사(별도 키)로 교체할 수 있습니다. 클레임 검사 EIP 패턴을 사용하여 나중에 메시지 콘텐츠를 검색합니다. 메시지 콘텐츠를 데이터베이스 또는 파일 시스템과 같은 영구 저장소에 일시적으로 저장할 수 있습니다. 이 패턴은 메시지 콘텐츠가 매우 크며 모든 구성 요소에 모든 정보가 필요한 것은 아닙니다.
외부 당사자와의 정보를 신뢰할 수 없는 경우에도 유용할 수 있습니다. 이 경우 클레임 검사를 사용하여 데이터의 중요한 부분을 숨깁니다.
EIP 패턴의 Camel 구현은 메시지 콘텐츠를 내부 메모리 저장소에 일시적으로 저장합니다.
그림 10.4. 클레임 검사 패턴
![라이브러리에 저장](https://access.redhat.com/webassets/avalon/d/Red_Hat_Fuse-7.13-Apache_Camel_Development_Guide-ko-KR/images/cc3c4ea66368e545aa5a833cd77ac223/store_in_library.gif)
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>