2014-06-16 1 views
0

현재 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 사용을 볼 수 있습니다.

내가 원하는 것은 :

  1. 프로세스의 HTTP에서이 요청을 수신하고, WMQ을 Queue.Write하는 요청 메시지를 작성합니다.
  2. 요청 메시지가 Queue.Write wmq에 기록 된 후 Queue.Read wmq에서 응답을 읽은 다음 첫 번째 경로로 다시 보내고 일부 데이터 변환을 수행하고 싶습니다.
  3. HTTP 끝점에 대한 응답을 다시 보내고 싶습니다.

아파치 낙타에서 다음 문서를 읽고 제안 할 것을 시도했다 :

  1. http://camel.apache.org/request-reply.html
  2. http://camel.apache.org/jms.html
  3. 을 그리고 다른 관련 자원 그러나 아무것도 작동하지

나를 위해.

을 : 나는 요청 회신에 대해 서로 다른 엔드 포인트를 사용하기 때문에

  1. 입출력 교환 패턴은
  2. 내가 추가하여 내 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를 성공적으로 구현하려고 시도했습니다 :

,

Mule-Example

및 제 2 유동 내 Queue.Read 후

<vm:outbound-endpoint path="response"/> 

추가.

하지만 지금은 Apache Camel에서해야합니다. 낙타에서 그렇게 할 수있는 방법이 있습니까? 아니면 (wmq 엔드 포인트를 변경하지 않고) 내 문제점을 해결하는 방법에 대한 아이디어가 있습니까? 당신의 도움을 주셔서 감사합니다. 당신이 JMSDestiantion의 hader queue:///LSMH.ZKSEAP.SERVICEBUS?targetClient=1을 설정하기 때문에

답변

0

는 낙타 그래서 당신은 메시지를 처리하는 큐에 리스너를해야하고, 표준 JMSReplyTo 헤더에 의해 정의 된 응답 메시지를 다시 보낼 큐 LSMH.ZKSEAP.SERVICEBUS에 메시지를 보냅니다.

특별한 replyTo를 설정하지 않았기 때문에 Camel은 임시 대기열을 사용합니다. IBM WebSphere가이를 지원하는지 확실하지 않습니다. 따라서 고정 된 JMSReplyTo 헤더를 설정할 수 있습니다. Camel JMS 문서에서 자세한 내용을 볼 수 있습니다.

두 번째 경로는 메시지를 보내지 않은 Queue.Read에서 읽음으로 인해 사용되지 않을 가능성이 큽니다.

그러나 JMS 페이지를 다시 읽고 공유 된/임시 또는 전용 응답 대기열을 사용하는 JMS를 통한 여러 가지 회신에주의하십시오.

+0

리스너에 대해 대기열 대신 직접 또는 다른 끝점을 사용할 수 있습니까? – pokopang

관련 문제