2.14. OnCompletion
2.14.1. 개요 링크 복사링크가 클립보드에 복사되었습니다!
OnCompletion DSL 이름은 작업 단위
가 완료될 때 수행할 작업을 정의하는 데 사용됩니다. 작업 단위는
전체 교환을 포함하는 Camel 개념입니다. 34.1절. “교환”을 참조하십시오. onCompletion
명령에는 다음과 같은 기능이 있습니다.
-
OnCompletion
명령의 범위는 글로벌 또는 경로당일 수 있습니다. 경로 범위는 글로벌 범위를 덮어씁니다. -
OnCompletion
은 실패 시 성공 시 트리거되도록 구성할 수 있습니다. -
onWhen
서술자는 특정 상황에서만onCompletion
을 트리거하는 데 사용할 수 있습니다. - 기본값은 스레드 풀이 아니지만 스레드 풀을 사용할지 여부를 정의할 수 있습니다.
2.14.2. OnCompletion을 위한 경로만 범위 링크 복사링크가 클립보드에 복사되었습니다!
교환에 onCompletion
DSL이 지정되면 Camel이 새 스레드를 구동합니다. 이를 통해 onCompletion
작업의 간섭 없이 원래 스레드를 계속할 수 있습니다. 경로는 하나의 onCompletion
만 지원합니다. 다음 예에서 onCompletion
은 교환이 성공 또는 실패로 완료되었는지 여부를 트리거합니다. 기본 동작입니다.
XML의 경우 형식은 다음과 같습니다.
실패 시 onCompletion
을 트리거하려면 onFailureOnly
매개변수를 사용할 수 있습니다. 마찬가지로 성공 시 onCompletion
을 트리거하려면 onCompleteOnly
매개변수를 사용합니다.
XML의 경우 onFailureOnly
및 onCompleteOnly
는 onCompletion
태그에서 부울로 표시됩니다.
2.14.3. 온Completion을 위한 글로벌 범위 링크 복사링크가 클립보드에 복사되었습니다!
두 개 이상의 경로에 대한 onCompletion
을 정의하려면 다음을 수행합니다.
2.14.4. OnIf 사용 링크 복사링크가 클립보드에 복사되었습니다!
특정 상황에서 onCompletion
을 트리거하려면 on When
서술자를 사용합니다. 다음 예제는 메시지 본문에 Hello
:이라는 단어가 포함된 경우 onCompletion
을 트리거합니다.
2.14.5. 스레드 풀과 함께 또는 없는 온Completion 사용 링크 복사링크가 클립보드에 복사되었습니다!
Camel 2.14부터는 기본적으로 스레드 풀을 사용하지 않습니다. 스레드 풀을 강제로 사용하려면
executorService
를 설정하거나 parallelProcessing
을 true로 설정합니다. 예를 들어 Java DSL에서는 다음 형식을 사용합니다.
onCompletion().parallelProcessing() .to("mock:before") .delay(1000) .setBody(simple("OnComplete:${body}"));
onCompletion().parallelProcessing()
.to("mock:before")
.delay(1000)
.setBody(simple("OnComplete:${body}"));
XML의 경우 형식은 다음과 같습니다.
<onCompletion parallelProcessing="true"> <to uri="before"/> <delay><constant>1000</constant></delay> <setBody><simple>OnComplete:${body}<simple></setBody> </onCompletion>
<onCompletion parallelProcessing="true">
<to uri="before"/>
<delay><constant>1000</constant></delay>
<setBody><simple>OnComplete:${body}<simple></setBody>
</onCompletion>
executorServiceRef
옵션을 사용하여 특정 스레드 풀을 참조합니다.
<onCompletion executorServiceRef="myThreadPool" <to uri="before"/> <delay><constant>1000</constant></delay> <setBody><simple>OnComplete:${body}</simple></setBody> </onCompletion>>
<onCompletion executorServiceRef="myThreadPool"
<to uri="before"/>
<delay><constant>1000</constant></delay>
<setBody><simple>OnComplete:${body}</simple></setBody>
</onCompletion>>
2.14.6. 소비자 전송 응답 전에 온Completion 실행 링크 복사링크가 클립보드에 복사되었습니다!
OnCompletion
은 다음 두 가지 모드로 실행할 수 있습니다.
- AfterConsumer - 소비자가 완료된 후 실행되는 기본 모드
-
beforeConsumer - 소비자가 호출자에게 다시 응답을 쓰기 전에 실행됩니다. 이를 통해
OnCompletion
을 통해 특수 헤더 추가와 같은 교환을 수정하거나 Exchange를 응답 로거로 기록할 수 있습니다.
예를 들어 헤더로 생성된
를 응답에 추가하려면 다음과 같이 modeBeforeConsumer()
를 사용합니다.
.onCompletion().modeBeforeConsumer() .setHeader("createdBy", constant("Someone")) .end()
.onCompletion().modeBeforeConsumer()
.setHeader("createdBy", constant("Someone"))
.end()
XML의 경우 mode 속성을 BeforeConsumer
로 설정합니다.
<onCompletion mode="BeforeConsumer"> <setHeader headerName="createdBy"> <constant>Someone</constant> </setHeader> </onCompletion>
<onCompletion mode="BeforeConsumer">
<setHeader headerName="createdBy">
<constant>Someone</constant>
</setHeader>
</onCompletion>