目前我正在使用Apache Camel。我想要做的是配置請求回覆。這裏是我的路線:駱駝:請求回覆不同的端點
<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>
在這些reoutes,我們可以看到,我有用於輸入和2 WMQ端點,1個寫,1個用於讀取HTTP端點。
我要的是:
- 從HTTP接收請求,處理它,並寫請求消息Queue.Write WMQ。
- 在請求消息寫入Queue.Write wmq之後,我想從Queue.Read wmq讀取響應,然後將其發送回第一個路由,並執行一些數據轉換
- 在完成所有步驟已完成,那麼我想將回應發送回http端點。
我從Apache的駱駝閱讀下列文件,並試圖做的建議:
但沒有什麼工作爲了我。
- 的的InOut交換模式是行不通的,因爲我用不同的端點的請求 - 應答
- 我試圖通過添加聲明對我的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消息不是 收到的內容:20000 millis應答消息與correlationID: cid未收到。 Exchange [Message: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 /在 org.apache.camel.component.jms.reply.ReplyManagerSupport.processReply(ReplyManagerSupport.java:133)在 org.apache.camel.component.jms.reply mobako11.2] .TemporaryQueueReplyHandler.onTimeout(TemporaryQueueReplyHandler.java:61) 在 org.apache.camel.component.jms.reply.CorrelationTimeoutMap.onEviction(CorrelationTimeoutMap.java:53) 在 org.apache.camel.component.jms.reply (CorrelationTimeoutMap.java:30) at org.apache.camel.support.Default TimeoutMap.purge(DefaultTimeoutMap.java:212) at org.apache.camel.support.DefaultTimeoutMap.run(DefaultTimeoutMap.java:162) at java.util.concurrent.Executors $ RunnableAdapter.call(Unknown Source)at java的。util.concurrent.FutureTask.runAndReset(未知 來源)在 java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.access 301 $(未知 來源)在 java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.run(未知 來源)在java.util.concurrent.ThreadPoolExecutor.runWorker(未知 來源)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(未知 來源)在java.lang.Thread.run(來源不明)
剛爲了您的信息,我試圖在Mule ESB上這樣做,併成功實施它,使用:
和我的第二流Queue.Read後加入
<vm:outbound-endpoint path="response"/>
。
但是,現在我需要在Apache Camel中做到這一點。駱駝有什麼辦法可以這樣做嗎?或者你有一些關於如何解決我的問題的想法(無需更改wmq端點)。謝謝你的幫助。
我可以使用直接或其他端點而不是隊列來監聽嗎? – pokopang