鉴于 MessageChannel 或消息对象,如何从其中一个获取收到消息的基础JMS队列的名称?
以下是该方案: xml中定义了几个 jms:消息驱动通道适配器实例。每个适配器的目标名称使用SEL从不同的队列接收。此SEL是动态的,不可能提前知道这些队列名称。所有通道适配器都输出到相同的内部Spring Integration通道。
我想将收到邮件的实际基础队列名称添加到邮件的标题中。
我们的想法是为通道适配器或内部通道设置 ChannelInterceptor 。 postReceive()方法将Message和MessageChannel都作为参数。使用其中任何一个,是否可以获取消息所在的基础队列名称? 感谢
答案 0 :(得分:1)
看起来你需要扩展一点DefaultJmsHeaderMapper
:
class DestinationJmsHeaderMapper extends DefaultJmsHeaderMapper {
public Map<String, Object> toHeaders(javax.jms.Message jmsMessage) {
Map<String, Object> headers = super.toHeaders(jmsMessage);
headers.put("JMS_DESTINATION", ((Queue) jmsMessage.getJMSDestination()).getQueueName());
}
}
并将其注入<jms:message-driven-channel-adapter>
答案 1 :(得分:0)
我们就是这样做的:
<int:header-enricher>
<int:header name="JMS_DESTINATION" expression="payload.JMSDestination.queueName"/>
</int:header-enricher>
extract-payload="false"
需要<jms:message-driven-channel-adapter>
。
P.S。 Artem的答案缺少return
声明(我没有足够的声誉来评论)。