Spring 集成 - 将消息 headers 复制到 JMS 消息

Spring Integration - copy message headers to JMS Message

在 spring 集成中使用出站网关时,我试图在 JMS Header 中发送回复 Q 的详细信息。我了解到 JIRA #INT-97 中的增强功能将 spring 消息 headers 复制到 JMS headers,然后再将其发送到 JMS 目的地。

在发送消息到出站网关之前,设置消息header如下。 message.getHeader().setAttribute(JmsTargetAdapter.JMS_REPLY_TO, myReplyDestination);

但是我无法在任何 SI jar 中找到 JmsTargetAdapter class。

谁能帮我弄出装有这个 class 的罐子?

还有,我下面的理解对吗?

  1. 使用具有 MQQueue object 的 JMSReplyTo 属性丰富您的消息 header(我正在向 MQ 发送消息)
  2. Post 使用出站网关的消息(默认情况下,JMS Headers 将附加 SI headers)

编辑:

我有源系统和目标系统,其中源向 MQ 代理发送请求,例如:MQBroker 1,目标向 MQBroker 2 发回回复。两个代理都通过中间件层互连。

我需要在请求中传递回复 Q 和 Q 经理详细信息 header 以便目的地放回回复。但是回复 Q 的详细信息驻留在 Broker 2 中,而出站网关配置将具有 Broker 1 配置。

如何使用出站网关实现这一点?这可能吗?

这是一个非常非常古老的 pre-release 框架的一个非常古老的问题。

参见 the current documentation about how to use the outbound gateway

您不需要那样设置 header;在网关上配置 reply-destination* 属性之一。

编辑

回复您的评论:

网关无法与两个不同的代理对话。为此,您必须使用出站和入站通道适配器,并进行您自己的回复关联。

为此,您可以使用 header enricher 来设置 jms_replyTo header...

<int:header-enricher>
    <int:header name="jms_replyTo" ref="someReplyDestination" />
    <int:header name="jms_correlationId" expression="headers['id'].toString()" />
</int:header-enricher>

...其中 someReplyDestinaion 是一个 <bean/>,代表您的供应商的 queue object。第二个 header 将设置 JMSCorrelationId。 (或者您可以使用自己的关联机制)。

回复中的JMSCorrelationID会在headerjms_correlationId.

只要服务器回显相同的correlation id,你就可以将回复与请求相匹配;在您自己的代码中,或使用聚合器。