낙타 컨텍스트에서 경로의 끝점 선언에서 참조되는 스프링 빈을 사용하여 Camel 끝점을 구성하는 방법을 찾으려고 시도했지만 작동하지 않습니다.Spring bean으로 Camel Endpoint를 설정하기위한 긴 URI의 대안은 무엇입니까?
예를 들어 매개 변수가 많은 끝점 URI를 정의하는 것은 매우 끔찍한 일입니다 (!!). 빈과 해당 속성으로 끝점을 구성하는 것이 훨씬 쉬울 것입니다. (또는 더 나은 점은 XML로 끝점을 구성 할 때 또는 요소에 끝점의 매개 변수를 구성 할 수있는 일반 bean과 같은 하위 요소가 있어야한다는 것입니다.
아래의 첫 번째 접근 방식은 잘 작동하며 매우 표준적이고 간단합니다. 두 번째 방법은 대신 사용하고 싶지만 작동하지 않습니다. 나는 많은 변형을 시도했지만 성공하지 못했습니다! 아래의 세 번째 대안은 실제로 낙타 개발자를위한 흥미로운 제안 일뿐입니다. 그러나 또한 요점을 설명합니다.
아래 예에서 파일 끝점에 대해 3 개의 매개 변수 만 구성했지만 10 개의 매개 변수로 URI를 상상해보십시오 !! 제 질문은 어떻게하면 두 번째 접근 방식을 제대로 작동하게 할 수 있을까요? 저는 간단한 해결책이 있다는 것을 확신합니다! 나는 또한 factory-bean과 factory 메소드를 사용해 보았지만 둘 다 작동하지 않았다.
1) XML에서 낙타 엔드 포인트 (봄 콩)를 구성하는 기본 방법 :
...
<camel:camelContext id="camelContext" >
<camel:route id="deviceDataLogsPoller" >
<camel:from uri="file://long/path/to/input?preMove=../inprogress&move=../done&moveFailed=../error" />
<camel:log message="Input device data file read from file in input folder {{im.filePoller.folder.input}}." loggingLevel="INFO" />
</camel:route>
</camel:camelContext>
내가 valide 될 것으로 예상하지만 나를 위해 (작동하지 않습니다 2) 대안) :!
을 위의 두 가지 대안) 사이 (혼합 미래에 흥미로운 일이 될 것이다<bean id="filePoller" class="org.apache.camel.component.file.FileEndpoint" >
<property name="camelContext" ref="camelContext" />
<property name="localWorkDirectory" value="/long/path/to/input" />
<property name="preMove" value="../inprogress" />
<property name="move" value="../done" />
<property name="moveFailed" value="../error" />
...
</bean>
...
<camel:camelContext id="camelContext" >
<camel:route id="deviceDataLogsPoller" >
<camel:from ref="filePoller" />
<camel:log message="Input device data file read from file in input folder {{im.filePoller.folder.input}}." loggingLevel="INFO" />
</camel:route>
</camel:camelContext>
3) 대안 :
...
<camel:route id="deviceDataLogsPoller" >
<camel:from uri="file://long/path/to/input" >
<property name="preMove" value="../inprogress" />
<property name="move" value="../done" />
<property name="moveFailed" value="../error" />
...
</camel:from>
<camel:log message="Input device data file read from file in input folder {{im.filePoller.folder.input}}." loggingLevel="INFO" />
</camel:route>
</camel:camelContext>
예, 작동하지만 일부 속성을 추가하여 params를 설정하는 순간 URI가 매개 변수로 지정된 것처럼 항상 올바르게 작동하지는 않습니다. 예를 들어 'move'속성과 SimpleExpression 타입의 빈을 값 (문자열 대신)으로 사용하여 '이동'매개 변수를 지정하면 모든 것이 시작되지만 입력 폴더의 파일은 다음으로 이동할 수 없습니다. '이동'폴더는 파일이 아니라 폴더를 기다리고 있기 때문에 (예외 메시지에 따라 분명히). – The4Summers
@ The4Summers 당신 말이 맞아요, 같은 방식으로 작동하지 않습니다. 이것을 올바르게 처리하는 방법을 보여주는'moveExpression' 예제를 추가했습니다. –
그래, 나는 그것을 잘 만들 수 있었지만,이 접근법은 URI를 사용하는 것보다 마침내 더 복잡하고 무거웠습니다 !! 위의 세 번째 대안에서 제안한 것처럼 끝점을 구성하는 방법을 사용하는 것이 더 재미있을 것입니다. 어쩌면 시간이 있다면 params 요소에서 전체 URI를 생성하여 기존 URI를 감싸는 "from"및 "to"태그를 직접 만들려고합니다 ...! Camel 개발자들에게도 이것을 제안 할 수 있습니다. 고맙습니다. – The4Summers