标头更丰富地设置JMSReplyTo字段并使用jms出站通道adpter发送相同的jms消息不起作用

时间:2015-09-28 06:13:20

标签: jms spring-integration

我使用jms出站通道适配器发送jms消息,但在发送jms消息之前我将JMSReplyTo设置为TEMP.Q3。

以下是示例配置。

<int:channel id="OutgoingMessageChannel" />
<int:channel id="headerInputChannel" /> 

<int-jms:outbound-channel-adapter id="ticketOutbound" connection-factory="jmsConnectionFactory" destination-name="TEMP.Q2" channel="OutgoingMessageChannel"/>

<int:header-enricher input-channel="headerInputChannel" output-channel="OutgoingMessageChannel">
    <int:header name="JMSReplyTo" value="TEMP.Q3"/>
</int:header-enricher>

上述方法不起作用,我无法看到&#34; JMSReplyTo&#34;字段设置为&#34; TEMP.Q3&#34;

我知道我可以使用jms出站网关来做同样的事情,但我不希望它本质上是同步的。

有人可以告诉我这是否可以使用jms出站通道适配器?

我是否需要遵循其他方法?

修改

这是新的工作配置。

<int:channel id="OutgoingMessageChannel" />
<int:channel id="headerInputChannel" /> 

<int-jms:outbound-channel-adapter id="ticketOutbound" connection-factory="jmsConnectionFactory" destination-name="TEMP.Q2" channel="OutgoingMessageChannel"/>

<int:header-enricher input-channel="headerInputChannel" output-channel="OutgoingMessageChannel">
    <int:header name="jms_replyTo" ref="replyQueue"/>        
</int:header-enricher>

<bean id="replyQueue" class="com.ibm.mq.jms.MQQueue">
    <constructor-arg value=" TEMP.Q3" />
</bean>

1 个答案:

答案 0 :(得分:1)

由于Spring Integration与许多协议交互,因此它不会在内部使用本机头名称,以避免冲突。

使用

<int:header name="jms_replyTo" ref="replyQueue"/>

<bean id="replyQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="TEMP.Q3" />
</bean>

,它将通过默认的标头映射器映射到JMSReplyTo

修改

JMSReplyTo标头必须是目的地,而不是简单的字符串;使用ref=""指向目标对象(上面的ActiveMQ示例)。