2016-04-04 3 views
0

Ich muss einige Standardfunktionalität hinzufügen, die auf einen Wert aus Nachrichtenheader in Spring Amqp vor dem Aufrufen der Funktion MessageMessage der implementierenden Klasse auswählen.Fügen Sie die Standardmethode vor dem Aufruf von onMessage hinzu, wenn MessageListener von Spring Amqp

Eg

class TestListener implements MessageListerner { 

public void onMessage(Message message){ 
// some logic 
    } 
} 

Von oben Beispiel ich brauche etwas maßgeschneiderte Funktionalität mit Message-Objekt aufrufen, bevor onMessage genannt wird.

Gibt es eine elegante Möglichkeit, das gleiche in SpringAmqp

+0

Ich verstehe die Frage nicht, oder vielleicht die hinter Grund ... Wenn Sie ändern möchten die Nachricht vor dem Empfangen, tun Sie das, bevor Sie es senden. Oder möchten Sie einfach etwas wie Header-Austausch verwenden? – cantSleepNow

+0

Die Anforderung besteht darin, eine beliebige Geschäftsoperation auf der Zuhörerseite auszuführen, bevor Message onMessage erhält. Z.B. Von Produzent Seite setzen Sie den Wert in der Nachrichtenkopf sagen Thread Name = t1, auf der Listener-Seite, ich werde diesen Wert abrufen und führen Sie eine generische Operation auf dieser t1 für andere Nachricht der Wert von threadname kann t2 usw. – Akshat

+0

Aber 'onMessage' wird nur aufgerufen, wenn eine Nachricht empfangen wird (oder mir etwas fehlt)? – cantSleepNow

Antwort

0

Sie könnten zu erreichen schaffen nur eine einfache Wrapper-Klasse um die Zuhörer.

public void onMessage(Message message) { 
    // process 
    myListener.onMessage(message) 
} 

Oder der Hörer Behälter hat eine Eigenschaft afterReceivePostProcessors genau diesem Grund ...

/** 
* Set {@link MessagePostProcessor}s that will be applied after message reception, before 
* invoking the {@link MessageListener}. Often used to decompress data. Processors are invoked in order, 
* depending on {@code PriorityOrder}, {@code Order} and finally unordered. 
* @param afterReceivePostProcessors the post processor. 
* @since 1.4.2 
*/ 
public void setAfterReceivePostProcessors(MessagePostProcessor... afterReceivePostProcessors) { ... } 
Verwandte Themen