我有以下要求:消息可以进入几个消息驱动通道适配器定义之一,所有这些定义显然都映射到不同的传入队列。
然后,所有通道适配器都转发到处理它们的同一内部Spring集成通道。
如何准确地确定消息是在哪个通道适配器上接收的,因此是在哪个队列中接收的?例如,在通道适配器配置中是否有一种方法可以指定在该点将属性添加到消息头中,这将是一种解决方案。谢谢
一种方法是编写一个ChannelInterceptor来为消息添加一个标头。presend()方法提供Message和MessageChannel作为参数。MessageChannel可以转换为NamedComponent(实现为AbstracMessageChannel的接口)以获取通道名称。
您可以在每个消息驱动通道适配器之后使用具有不同标识符的标头enrichier。
例如:
<jms:message-driven-channel-adapter id="jmsIn1" destination="inQueue1" channel="in1"/>
<int:header-enricher input-channel="in1" output-channel="out1">
<int:header name="fromAdapter" value="1"/>
</int:header-enricher>
<jms:message-driven-channel-adapter id="jmsIn2" destination="inQueue2" channel="in1"/>
<int:header-enricher input-channel="in2" output-channel="out2">
<int:header name="fromAdapter" value="2"/>
</int:header-enricher>