インバウンド部分に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
の実装を提供できます。
クイック返信をありがとう。私のブローカーは確かに優先度、配送料と時間(有効期限)を送信します。私はJIRAの問題を作成し、あなたと共有します。 SpringでJMSExpirationのヘッダーを設定する必要がありますか教えてください。 testMessageBuilder.setHeader( "timeToLive"、30L)のようなものです。また、JMSヘッダープロパティとSpringヘッダープロパティを持つSpringのドキュメントもありますか。 – Selvakumar
これらは、spring-jmsの 'JmsHeaders'クラスの定数として定義されています.Javadocsは、それらがマップする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またはexpirationを追加/再取得するためのフィールドは表示されません。私は現在、JMSTemplateをオーバーライドしてカスタムJMSTemplateをOut Bound Adapterに渡しています。 DynamicJMSTemplateと同様のものをビルドする必要があります。これは、マルチスレッド処理の優先順位を処理するためにThreadLocalホルダーを使用するためです。 – Selvakumar