현재 Apache Camel과 협력 중입니다. 내가 원하는 것은 요청 응답을 구성하는 것입니다. 여기 내 경로입니다 : 그 reoutes에Camel : Request Endly 다른 종단점
<route>
<from uri="jetty:http://localhost:8888/uebermittleAusweisdaten"/>
<process ref="TransformToXML"/>
<to uri ="xslt:mobako.sender.xsl"/>
<setHeader headerName="CamelJmsDestinationName">
<constant>queue:///LSMH.ZKSEAP.SERVICEBUS?targetClient=1</constant>
</setHeader>
<setHeader headerName="JMS_IBM_Character_Set">
<constant>ISO8859_1</constant>
</setHeader>
<setHeader headerName="JMSCorrelationID">
<constant>cid</constant>
</setHeader>
<to uri="jms:queue:Queue.Write"/>
<marshal ref="xmljson"/>
<!-- <process ref="ResponseToHTML"/> -->
</route>
<route>
<from uri="jms:queue:Queue.Read" />
<setBody><simple>IN: ${headers}</simple></setBody>
<to uri="stream:out"/>
</route>
, 우리는 내가 HTTP 엔드 포인트 입력과 2 WMQ 엔드 포인트, 읽기 쓰기 1 1 사용을 볼 수 있습니다.
내가 원하는 것은 :
- 프로세스의 HTTP에서이 요청을 수신하고, WMQ을 Queue.Write하는 요청 메시지를 작성합니다.
- 요청 메시지가 Queue.Write wmq에 기록 된 후 Queue.Read wmq에서 응답을 읽은 다음 첫 번째 경로로 다시 보내고 일부 데이터 변환을 수행하고 싶습니다.
- HTTP 끝점에 대한 응답을 다시 보내고 싶습니다.
아파치 낙타에서 다음 문서를 읽고 제안 할 것을 시도했다 :
- http://camel.apache.org/request-reply.html
- http://camel.apache.org/jms.html
- 을 그리고 다른 관련 자원 그러나 아무것도 작동하지
나를 위해.
을 : 나는 요청 회신에 대해 서로 다른 엔드 포인트를 사용하기 때문에
- 입출력 교환 패턴은
- 내가 추가하여 내 Queue.Read 엔드 포인트에 JMSCorrelationID로하고 JMSReplyTo를 선언하려고 작동하지 않습니다 :
<interceptFrom uri="jms:queue:ZKSEAP.LSMH.SERVICEBUS"> <setHeader headerName="JMSCorrelationID"> <constant>cid</constant> </setHeader> <setHeader headerName="JMSReplyTo"> <constant>queue:///LSMH.ZKSEAP.SERVICEBUS?targetClient=1</constant> </setHeader> </interceptFrom>
그러나 그것은 또한 또한, 작동하지 않았다, 난 그냥 지속적으로 다음과 같은 오류가 발생했습니다
org.apache.camel.ExchangeTimedOutException : OUT 메시지가 다음에서 수신되었습니다. 이 수신되지 않았습니다. correlID : cid가 수신되지 않은 20000 밀리 초 응답 메시지. 교환 [메시지 : http://security.fraport.de/zks-eap/uebermittleAusweisdaten urn : uuid : ID-FRA000000085404-55438-1402901836300-0-2esbp : //services.fraport.de/lsmh/mobakoesbp : //services.fraport.de/lsmh/zks-eapesbp : // services .fraport.de/lsmh/mobako11.2] at org.apache.camel.component.jms.reply.ReplyManagerSupport.processReply (ReplyManagerSupport.java:133) at org.apache.camel.component.jms.reply .TemporaryQueueReplyHandler.onTimeout org.apache.camel.component.jms.reply.CorrelationTimeoutMap.onEviction (CorrelationTimeoutMap.java:53)에서 (TemporaryQueueReplyHandler.java:61) org.apache.camel.component.jms.reply에서 .CorrelationTimeoutMap.onEviction (CorrelationTimeoutMap.java:30) at org.apache.camel.support.Default java.util.concurrent.Executors $ RunnableAdapter.call (알 소스)에서의 TimeoutMap.purge org.apache.camel.support.DefaultTimeoutMap.run (DefaultTimeoutMap.java:162)에서 (DefaultTimeoutMap.java:212) 자바.util.concurrent.FutureTask.runAndReset java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (알 소스)에서 $ 301 (알 소스) java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access에서 (알 소스)에서 java.lang.Thread.run에서 java.util.concurrent.ThreadPoolExecutor $ Worker.run (알 소스) (알 수없는 소스)에서 java.util.concurrent.ThreadPoolExecutor.runWorker (알 소스)
그냥 귀하의 정보를 얻으 려면 ESB ESB에서 Mule ESB를 성공적으로 구현하려고 시도했습니다 :
,및 제 2 유동 내 Queue.Read 후
<vm:outbound-endpoint path="response"/>
추가.
하지만 지금은 Apache Camel에서해야합니다. 낙타에서 그렇게 할 수있는 방법이 있습니까? 아니면 (wmq 엔드 포인트를 변경하지 않고) 내 문제점을 해결하는 방법에 대한 아이디어가 있습니까? 당신의 도움을 주셔서 감사합니다. 당신이 JMSDestiantion의 hader queue:///LSMH.ZKSEAP.SERVICEBUS?targetClient=1
을 설정하기 때문에
리스너에 대해 대기열 대신 직접 또는 다른 끝점을 사용할 수 있습니까? – pokopang