Apache Camel修改ActiveMQ响应消息

时间:2018-03-14 17:38:47

标签: xml apache-camel activemq

我将尽力通过我的解释尽可能彻底:

我的用例是从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&amp;script=resource:classpath:parseInboundXML.groovy"/>
        <to id="_logInboundMsg" pattern="OutOnly" uri="file:{{archive.path}}/in?exchangePattern=OutOnly&amp;fileName=$simple{exchange.getProperty(&quot;archiveFilename&quot;).replaceAll(&quot;:&quot;,&quot;-&quot;)}.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&amp;script=resource:classpath:setProperties.groovy"/>
        <to id="_logResponseMsg" pattern="OutOnly" uri="file:{{archive.path}}/out?exchangePattern=OutOnly&amp;fileName=$simple{exchange.getProperty(&quot;archiveFilename&quot;).replaceAll(&quot;:&quot;,&quot;-&quot;)}.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以确保将其正确返回到入站消息的最佳方法吗?

0 个答案:

没有答案