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 的罐子?
还有,我下面的理解对吗?
- 使用具有 MQQueue object 的 JMSReplyTo 属性丰富您的消息 header(我正在向 MQ 发送消息)
- 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,你就可以将回复与请求相匹配;在您自己的代码中,或使用聚合器。
在 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 的罐子?
还有,我下面的理解对吗?
- 使用具有 MQQueue object 的 JMSReplyTo 属性丰富您的消息 header(我正在向 MQ 发送消息)
- 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,你就可以将回复与请求相匹配;在您自己的代码中,或使用聚合器。