我使用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>
答案 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示例)。