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

Spring integration 使用Spring集成捕获队列/通道信息,spring-integration,Spring Integration,我有以下要求: 消息可以在几个消息驱动的通道适配器定义中的一个上传入,这些定义显然都映射到不同的传入队列 然后,所有通道适配器转发到处理它们的相同内部Spring集成通道 如何准确地确定在哪个通道适配器上接收到消息,并因此排队?例如,在通道适配器配置中是否有方法指定在该点将属性添加到消息头,这将是一种解决方案。 谢谢您可以在每个消息驱动通道适配器之后使用具有不同标识符的 例如: <jms:message-driven-channel-adapter id="jmsIn1" destinat

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

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

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

您可以在每个消息驱动通道适配器之后使用具有不同标识符的

例如:

<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>


一种方法是编写一个ChannelInterceptor,在消息中添加一个头。方法提供消息和消息通道作为参数。MessageChannel可能被强制转换为NamedComponent(一个实现为AbstracMessageChannel的接口)以获取频道名称。

谢谢,但我发现了一个问题。只有当每个消息驱动的通道适配器转发到不同的通道(报头充实器随后可以链接到该通道)时,此解决方案才会起作用。但在我的场景中,所有通道适配器都转发到同一个内部通道。是否有任何其他方式来配置标头enricher。当然,我们可以创建另一层内部通道,但不知道您是否有其他想法。这是我的代码示例中的一个错误。您可以为两个消息驱动通道适配器使用相同的输出通道。然后你可以使用标题值来知道你的消息来自哪里。谢谢,但我还是不清楚。在不使用适配器的输出通道链接它们的情况下,如何将标头enricher与适配器关联?你能提供另一段代码吗?嗨。您可以对两个消息通道适配器输出使用相同的输出通道。我编辑了我的代码样本以适应它。