我将尽力通过我的解释尽可能彻底:
我的用例是从ActiveMQ中获取XML,稍微修改它,并将其放在不同的ActiveMQ队列中,其中XML将由python脚本获取,该脚本使用XML信息构建响应XML,这将是放置在不同的ActiveMQ队列上,以便稍微修改响应,然后将其放到另一个ActiveMQ队列中,该队列充当原始camel路由的回复队列。
这是我到目前为止所做的:
<routeBuilder ref="DynamicRouteBuilder"/>
<route id="sendDCSBatchValues">
<description>Send</description>
<from id="_fromActiveMQQueues" uri="direct:queueA?failIfNoConsumers=false"/>
<log id="logInboundFile" loggingLevel="INFO" message="Inbound File received - ${in.headers.JMSMessageID}"/>
<setProperty id="_setPropertyArchiveFilename" propertyName="archiveFilename">
<simple>$simple{camelId}-${date:now:yyyyMMddHHmmss}-${bean:countr.incrementAndGet}</simple>
</setProperty>
<to id="_parseInboundMsg" pattern="InOut" uri="language:groovy:resourceUri?exchangePattern=InOut&script=resource:classpath:parseInboundXML.groovy"/>
<to id="_logInboundMsg" pattern="OutOnly" uri="file:{{archive.path}}/in?exchangePattern=OutOnly&fileName=$simple{exchange.getProperty("archiveFilename").replaceAll(":","-")}.xml"/>
<to id="_sendInboundMsg" pattern="InOut" uri="activemq:queue:{{activemq.sending.endpoint}}?exchangePattern=InOut;replyTo=activemq:queue:{{activemq.tempHolding.endpoint}}?exchangePattern=InOut;replyToType=Exclusive"/>
<onException id="_exception">
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
<to id="_exceptionQueue" pattern="OutOnly" uri="direct:exceptionCaught?failIfNoConsumers=false"/>
<log id="logSendException" loggingLevel="ERROR" message="Inbound File Exception - ${in.headers.JMSMessageID}"/>
</onException>
</route>
正如您所看到的,我有入站XML,我根据自己的喜好修改它,并将其放到&#34;发送&#34;队列。我已将replyTo队列设置为&#34; tempHolding&#34;队列。 &#34;发送&#34;上的消息队列将由不同的应用程序选取,该应用程序将使用XML信息来构建响应的XML。响应的XML将放在&#34;接收&#34;排队我会在第二条骆驼路线上捡起它并对其进行修改,最后将它放入&#34; tempHolding&#34;队列,以便它可以作为响应发回。
我的问题是:我如何确保响应XML具有正确的头信息,因此camel知道它是对原始消息的响应。我知道我需要一个jmsCorrelationID但是当我调试消息时,当消息被发送到&#34;发送&#34;时,它似乎没有被设置。队列。我是否必须在入站XML消息中设置这些属性,然后将它们从响应中拉出并将它们设置为属性,然后将响应XML放在&#34; tempHolding&#34;队列?
感谢您的帮助,如果有什么我可以更好地验证,请告诉我。
修改
我认为发布我的接收队列会有所帮助,该队列接受XML响应并修改它,然后将其重新放回到&#34; tempHolding&#34;队列:
<route id="receiveResponse">
<description>Receive Values</description>
<from id="_responseMsg" uri="activemq:queue:{{activemq.receiving.endpoint}}?exchangePattern=OutOnly"/>
<to id="_setArchiveFilename" pattern="InOut" uri="language:groovy:resourceUri?exchangePattern=InOut&script=resource:classpath:setProperties.groovy"/>
<to id="_logResponseMsg" pattern="OutOnly" uri="file:{{archive.path}}/out?exchangePattern=OutOnly&fileName=$simple{exchange.getProperty("archiveFilename").replaceAll(":","-")}.xml"/>
<log id="logResponseMsg" loggingLevel="INFO" message="Outbound File Archive - ${in.headers.JMSMessageID}"/>
<to id="_responseMsgToQueue" pattern="OutOnly" uri="activemq:queue:{{activemq.tempHolding.endpoint}}?exchangePattern=OutOnly"/>
</route>
我的原始问题是,这是修改响应XML以确保将其正确返回到入站消息的最佳方法吗?