提问者:小点点

使用Spring集成捕获队列/通道信息


我有以下要求:消息可以进入几个消息驱动通道适配器定义之一,所有这些定义显然都映射到不同的传入队列。

然后,所有通道适配器都转发到处理它们的同一内部Spring集成通道。

如何准确地确定消息是在哪个通道适配器上接收的,因此是在哪个队列中接收的?例如,在通道适配器配置中是否有一种方法可以指定在该点将属性添加到消息头中,这将是一种解决方案。谢谢


共2个答案

匿名用户

一种方法是编写一个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>