使用Camel设置IBM MQ请求消息的MQMD的ReplyToQ属性

时间:2018-02-07 09:45:37

标签: apache-camel ibm-mq

我使用Camel with Fuse,我在设置JMSReplyTo时遇到了麻烦。以下是我的路线摘录:

<setHeader headerName="JMSReplyTo" id="_setHeader2">
    <constant>QTEST</constant>
</setHeader>
<setHeader headerName="CamelJmsDestinationName" id="_setHeader1">
    <constant>queue://QM_TEST/SYSTEM.DEFAULT.LOCAL.QUEUE?targetClient=1</constant>
</setHeader>
<to id="_to1" uri="websphere:queue:SYSTEM.DEFAULT.LOCAL.QUEUE?replyTo=QTEST"/>

我以此处给出的代码为例: Implementing native websphere MQ with CoD over Camel JMS component 起初,我认为这是因为我使用CamelJmsDestinationName头中设置的targetClient = 1指令删除了不需要的jms头,但即使没有它,它也不会将任何内容设置为MQMD的ReplyToQ属性。我也尝试了这里给出的建议How to send message to different Queue hosted in different queue manager and hostname in IBM MQ cluster,但这对我来说也不起作用,就像这样:

queue://QM_TEST/QTEST?mdReadEnabled=true&messageBody=0&mdWriteEnabled=true&XMSC_WMQ_REPLYTO_STYLE=1&targetClient=1

问题是为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

我已经弄清楚如何设置ReplyToQ属性,但这只是我现在面临的问题的一部分。如此处所述,在JMS Producer章节中:

http://camel.apache.org/jms.html

所需要的只是:

        <setHeader headerName="CamelJmsDestinationName" id="_setHeader1">
            <constant>queue://QMib_TEST/OUTPUTQ?targetClient=1</constant>
        </setHeader>
        <to id="_to1" uri="websphere:queue:SYSTEM.DEFAULT.LOCAL.QUEUE?replyTo=REPLYQ" pattern="InOut"/>

这样做是它将请求消息放到OUTPUTQ,然后侦听REPLYQ,但匹配一些自动生成的相关ID。好的是,在请求消息中,ReplyToQ现在设置为REPLYQ,由于pattern =“InOut”设置,坏的是我们的情况下回复应用程序响应设置关联ID到收到请求的消息ID,全部来自MQMD,默认情况下,这个Camel模式不会在请求的MQMD中生成等于它所期望的(JMS?)相关ID的消息ID,因此响应保留在队列中,而不是消耗,即使它被放入适当的队列中。实际上,它甚至会在等待时间间隔后重复发出请求以获取过时,从而产生REPLYQ中未消耗的进一步响应消息。所以,这是我必须解决的另一个问题,如何正确处理MessageID和CorrelationID,但是主题中的那个,我已经解决了。