這是簡化版本什麼是由DefaultJmsHeaderMapper
入站部分映射:
public Map<String, Object> toHeaders(javax.jms.Message jmsMessage) {
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(JmsHeaders.MESSAGE_ID, messageId);
headers.put(JmsHeaders.DESTINATION, destination);
headers.put(JmsHeaders.CORRELATION_ID, correlationId);
headers.put(JmsHeaders.REPLY_TO, replyTo);
headers.put(JmsHeaders.REDELIVERED, jmsMessage.getJMSRedelivered());
headers.put(JmsHeaders.TYPE, type);
headers.put(JmsHeaders.TIMESTAMP, jmsMessage.getJMSTimestamp());
if (this.mapInboundPriority) {
headers.put(IntegrationMessageHeaderAccessor.PRIORITY, jmsMessage.getJMSPriority());
}
Enumeration<?> jmsPropertyNames = jmsMessage.getPropertyNames();
while (jmsPropertyNames.hasMoreElements()) {
String propertyName = jmsPropertyNames.nextElement().toString();
String headerName = this.toHeaderName(propertyName);
headers.put(headerName, jmsMessage.getObjectProperty(propertyName));
}
}
}
return headers;
}
你介意分享日誌,請問該消息外觀上發送爲JmsMessageDrivenEndpoint
消息通道後?
OTOH您始終可以擴展/覆蓋默認並提供您自己的JmsHeaderMapper
實施。
感謝您的快速回復。我的經紀人確實發送優先級,deliverymode和timetolive(到期)。我將創建一個JIRA問題並將與您分享。你能告訴我,我應該在Spring中爲JMSExpiration設置什麼標題?像testMessageBuilder.setHeader(「timeToLive」,30L);另外,在Spring中是否有一個文檔具有JMS頭部屬性和Spring頭部屬性。 – Selvakumar
它們被定義爲在彈簧JMS'JmsHeaders'類常量 - 的[Javadoc中展示給它們映射到其中的JMS頭(http://docs.spring.io/spring/docs/current/javadoc-api/index。 html?org/springframework/jms/support/JmsHeaders.html),但名稱不言自明。是的,看起來映射中也沒有到期。 –
單獨覆蓋DefaultJMSheaderMapper不會將這些標題添加到Out消息中。 JMS出站適配器使用DynamicJMSTemplate進行發送;反過來它使用DynamicJmsTemplateProperties來設置優先級。我沒有看到在DynamicJMSTemplate或Props中添加/刪除deliveryMode或過期的字段。我現在正在重寫JMSTemplate並將我的自定義JMSTemplate傳遞給Out Bound Adapter。將不得不構建類似於DynamicJMSTemplate的東西,因爲它使用ThreadLocal持有者來處理多線程處理的優先級 – Selvakumar