2014-03-01 2 views
2

하나의 입력을 받아서 Splitter와 비슷한 여러 개의 출력 메시지를 생성하는 Camel Component/Processor를 구현하려고합니다. 스플리터와 마찬가지로 출력은 경로의 다음 프로세서/엔드 포인트로 이동해야합니다.Camel Processor/Component에서 여러 개의 출력 생성

Splitter & MulticastProcessor 클래스를 재사용하거나 유사한 논리를 사용할 수 있기를 기대합니다. 이해할 수 있듯이이 아이디어는 각 출력에 대해 새 Exchange를 만들어서 내보내는 것입니다. 이렇게하려면 출력이 기록되는 끝점을 제공해야합니다. 프로세서 클래스에서 끝점을 동적으로 만들면이 작업이 가능합니다. 내 요구 사항은 경로를 구성된 끝점으로 출력을 보내는 것입니다. 아래 경로에서 mycomponent는 file : 출력에 (여러 번) 작성해야합니다.

<route> 
     <from uri="file:input"/> 
     <to uri="mycomponent:OrderFlow?multi.output=true"/> 
     <to uri="file:output" /> 
    </route> 

스플리터의 경우 출력 프로세서/끝점에 대한 액세스 권한이있는 SplitDefinition 클래스로 인스턴스화됩니다.

a) 프로세서 내에서 구성된 출력 프로세서/종단점에 액세스 할 수 있습니까?

b) 그렇지 않다면 프로세서 용 ProcessorDefinition 클래스를 작성해야합니까? 이것에 대한 어떤 조언도 도움이 될 것입니다. 페터 아래 제안

두 솔루션은

가)) 프로듀서 템플릿 B를 주입하는 대신 새 구성 요소를 작성하는 방법 호출로 사용 분배기 구성 요소입니다.

+0

귀하의 요구 사항을 다시 말해 주시겠습니까? –

답변

1

나는 this page을 읽은 것으로 간주합니다.

예, 사용자 지정 프로세서에서 여러 개의 교환을 보낼 수는 있지만 실제로 흐름의 다음 프로세서는 아닙니다. 위 링크에서와 같이 제작자 템플릿에 특정 대상을 삽입하여 구성 요소 구현을 분리 할 수 ​​있습니다. 직접 또는 seda 전송을 사용하여 경로를 여러 부분으로 잘라서 구성 요소가 메시지를 보낼 수있게 할 수 있습니다. 이렇게하면 여러 경로에서 코드를 재사용 할 수 있습니다.

이것은 낙타 코어의 스플리터 구성 요소에서 수행 한 것입니다. 예를 들어 multicastprocessor baseclass을 살펴보십시오. 그러나 프로세서는 경로 작성기 덕분에 다음 경로의 프로세서를 인식합니다. 당신은 맞춤 프로세서가 그렇게 운이 좋은 것은 아닙니다.

CamelContext에서 해당 정보를 추출 할 수 있습니다. 당신의 노선을 잡고 거기에 당신은 경로에서 프로세서를 찾을 수 있습니다. 그러나, 그것은 overcomplicating 것 같이 보인다.

업데이트 : DSL을 변경하는 대신 기존 DSL 및 구성 요소를 사용하십시오.

.split().method("mycomponent", "OrderFlow") 

대신 새로운 교류를 방출, 당신의 OrderFlow 방법은 결과 메시지와 함께 ..> 목록 <을 만들 필요가있다.

+0

감사합니다. ProducerTemplate을 살펴 봤지만 Splitter와 비슷한 경로에서 다음 프로세서로 출력을 보내려고합니다. (깨끗하게하려면 경로를 원합니다) – Krishnan

+0

경로 정의에 액세스 할 수있는 Splitter를 사용하고 있습니까? 권한이 있고 다른 사용자 지정 프로세서가 동일한 액세스 할 수 없습니다?이 ProcessorDefinition 클래스에는 많은 문서가 없습니다. 출력을 소비하는 프로세서에 액세스 할 수 있도록 사용자 정의 프로세서 용으로 작성할 수 있습니까? 생산자 템플릿을 주입하고 직접 운송을 사용하여 경로를 분할하는 솔루션은 많은 의미가 있습니다. 불행히도 내 프로세서는 Splitter만큼 자연 스럽습니다. 다른 사람이 경로를 작성하는 데 사용하기 때문입니다. – Krishnan

+0

물론, 다른 "스플리터와 같은"구성 요소를 구현하는 것이 가능합니다. 다른 것들 중에서도 ProcessorDefinition 클래스와 같이 낙타의 핵심을 혼란스럽게해야 할 것입니다. 나는 그것에 대한 충고를 원할 것이다. 당신이하고 싶은 것을 할 수있는 다른 방법이있을 수 있습니다. 답을 예제로 업데이트하겠습니다. –

관련 문제