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

setting ReplyToQ attribute of MQMD of IBM MQ request message with Camel

我将 Camel 与 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 header 中设置的 targetClient=1 指令删除了不需要的 jms header,但即使没有它,它也不会为 MQMD 的 ReplyToQ 属性设置任何内容。我也尝试了这里给出的建议,但这对我也不起作用,就像这样:

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

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

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

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 相匹配。好消息是,由于 pattern="InOut" 设置,ReplyToQ 现在在请求消息中设置为 REPLYQ,坏消息是,在我们的案例中,回复应用程序将相关 ID 设置为收到请求的消息 ID 进行响应,全部来自MQMD,默认情况下,此 Camel 模式不会在请求的 MQMD 中生成等于(JMS?)它期望的相关 ID 的消息 ID,因此响应保留在队列中,而不是被消耗,即使它被放入适当的队列中。事实上,它甚至会在 get 的等待间隔结束后重复发出请求,从而生成 REPLYQ 中未使用的进一步响应消息。所以,这是我要解决的另一个问题,如何正确处理 MessageID 和 CorrelationID,但是主题中的那个,我已经解决了。