给定 MessageChannel 或 Message 对象,如何从其中一个中获取收到消息的基础JMS队列的名称?
下面是场景:在xml中定义了几个 jms:message-driven-channel-adapter 实例 . 每个适配器的 destination-name 使用SEL从不同的队列接收 . 此SEL是动态的,不可能提前知道这些队列名称 . 所有通道适配器输出到相同的内部Spring Integration通道 .
我想将收到消息的实际底层队列名称添加到消息的 Headers 中 .
我们的想法是为通道适配器或内部通道设置 ChannelInterceptor . postReceive() 方法将Message和MessageChannel都作为参数 . 使用其中任何一个,是否可以获取消息所在的基础队列名称?谢谢
2 回答
看起来你需要扩展一点
DefaultJmsHeaderMapper
:并将它注入你的
<jms:message-driven-channel-adapter>
这就是我们这样做的方式:
它在
<jms:message-driven-channel-adapter>
中需要extract-payload="false"
.附: Artem的答案缺少
return
陈述(我没有足够的声誉来评论) .