2016-04-06 2 views
1

Ich bin eine JMS-Nachricht mit den Outbound-Kanal-Adapter wie folgt zu senden:Wie bekomme ich JMSMessageId nach dem Senden mit einem Outbound-Channel-Adapter?

<intjms:outbound-channel-adapter 
     destination-name="MY.QUEUE" 
     connection-factory="myConnectionFactory" 
     channel="mySender"/> 

Danach Ich brauche den JMS-Message-Id kennen. Wie kann ich es bekommen?

There is ein Weg, es in einem benutzerdefinierten JmsTemplate zu tun, könnte ich in den Adapter liefern, aber vielleicht gibt es eine einfachere Lösung für dieses Problem.

Ich kann das Gateway nicht verwenden, da keine Antwort vorliegt.

Antwort

0

Sie können JMS Message als payload der Spring Integration Message an diesen Adapter senden. Und verwenden Sie die getJMSMessageID() nach erfolgreichem Senden.

UPDATE

Aber das bedeutet, dass ich nicht die Convenience des JmsTemplate verwenden können und mit javax.jms.Connection und javax.jms.Session auf eigene Faust behandeln eine Lage sein, zu schaffen javax.jms.Message, richtig?

Nun, verbietet niemand Sie sogar JmsTemplate direkt als Referenz aus den allgemeinen <service-activator> zu verwenden. Die <outbound-channel-adapter> ist one-way durch das Ziel. Es ist also wirklich nicht beabsichtigt, etwas zurückzugeben. Ihre Ecke erfordert wirklich etwas zu tun. Und das ist die javax.jms.Session Haken und Tricks, um eine JMS-Nachricht zu erstellen, um seine ID danach abrufen zu können. Es gibt eine ThreadLocal Loch über die benutzerdefinierte JmsHeaderMapper und die Nachricht Zugriff von seiner fromHeaders() Implementierung, aber ich denke, dass für diesen Fall wäre es besser, JmsTemplate direkt zu verwenden.

+0

Aber das bedeutet, ich kann nicht die Convencience der 'JmsTemplate' verwenden und muss mich mit' javax.jms.Connection' und 'javax.jms.Session' alleine beschäftigen, um ein' javax.jms erstellen zu können .Nachricht', richtig? –

+0

Bitte finden Sie ein UPDATE in meiner Antwort. –

Verwandte Themen