Spring integration Spring集成:从消息或消息通道获取基础队列的名称

Spring integration Spring集成:从消息或消息通道获取基础队列的名称,spring-integration,Spring Integration,给定MessageChannel或Message对象,如何从其中一个对象获取接收消息的底层JMS队列的名称 以下是场景: xml中定义了几个jms:message-driven通道适配器实例。每个适配器的目标名称使用SEL从不同队列接收。此SEL是动态的,不可能提前知道这些队列名称。所有通道适配器输出到同一内部Spring集成通道 我想将接收消息的实际基础队列名称添加到消息头中 想法是为通道适配器或内部通道设置通道拦截器。postReceive()方法将Message和MessageChanne

给定MessageChannelMessage对象,如何从其中一个对象获取接收消息的底层JMS队列的名称

以下是场景: xml中定义了几个jms:message-driven通道适配器实例。每个适配器的目标名称使用SEL从不同队列接收。此SEL是动态的,不可能提前知道这些队列名称。所有通道适配器输出到同一内部Spring集成通道

我想将接收消息的实际基础队列名称添加到消息头中

想法是为通道适配器或内部通道设置通道拦截器。postReceive()方法将Message和MessageChannel都作为参数。使用这两种方法中的任何一种,是否可以获取消息传入的基础队列名称的名称?
谢谢

看起来您需要扩展一点
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());
    }
}
类DestinationJmsHeaderMapper扩展了DefaultJmsHeaderMapper{
公共映射到头文件(javax.jms.Message jmsMessage){
Map headers=super.toHeaders(jmsMessage);
headers.put(“JMS_DESTINATION”,((Queue)jmsMessage.getJMSDestination()).getQueueName());
}
}
并将其注入您的
s

我们就是这样做的:

  <int:header-enricher>
     <int:header name="JMS_DESTINATION" expression="payload.JMSDestination.queueName"/>
  </int:header-enricher>

它需要在您的
中使用
extract payload=“false”


另外,Artem的答案缺少
return
语句(我没有足够的声誉来评论)。

谢谢,我已经扩展了DefaultJmsHeaderMaper,正在将它注入消息驱动适配器,并且正在调用它。但是,从传递到转换器(适配器调用)的消息来看,似乎没有向头添加任何内容。下面是代码'code'@Component public-Map-toHeaders(Message jmsMessage){Map-headers=super.toHeaders(jmsMessage);headers.put(“SOLACE_-TOPIC”,((SolTextMessage)jmsMessage.getJMSDestination().toString());return super.toHeaders(jmsMessage);}}'code'因为它是您的类,您收到
SolTextMessage
在代码中添加断点,并尝试调查传入JMS消息的内容。可能其他属性中存在所需的目的地。。。