2016-10-21 5 views
1

Gibt es eine Möglichkeit, Nachrichten abzufangen, sobald template.convertAndSend aufgerufen wird, bevor die Nachricht an RabbitMQ übermittelt wird.Verwendung von Interceptor mit Spring AMQP

Auch eine Möglichkeit, die Nachricht abzufangen, bevor sie den Handler erreicht?

Ich kann die Nachricht mit PostProcessor für Publisher behandeln, aber Interceptor lieber verwenden.

public class TestPostProcessor implements MessagePostProcessor { 

    @Autowired 
    Tracer defaultTracer; 

    @Override 
    public Message postProcessMessage(Message message) throws AmqpException { 
     //..... 
     //.... 
     return message; 
    } 
} 

Irgendwelche Vorschläge?

+0

'> Ich kann die Nachricht mit PostProcessor für Publisher behandeln, aber lieber Interceptor verwenden. Können Sie erklären, was Sie damit meinen? Das MPP ist eine Form von Interzeptor. Der Listener-Container unterstützt auch MPPs nach dem Empfang und vor der Zustellung an den Listener: 'setAfterReceivePostProcessors()'. –

+0

Um es zu verwenden, musste ich rabbitTemplate.convertAndSend (routingKey, "Message", postProcessor); - hat sich gefragt, ob es einen Weg gibt, dies zu injizieren, ohne dass wir es hier angeben müssen. Wie würden wir es auch auf SimpleMessageListenerContainer tun? – basu76

+0

Ja; Sieh meine Antwort. –

Antwort

2

MessagePostProcessor ist eine Form des Interzeptors.

Es gibt zwei Möglichkeiten, ein zu berufen - eine der überladenen convertAndSend() Methoden verwenden, die eine MPP als Argument nehmen, oder fügen Sie eine oder mehrere der RabbitTemplatesetBeforePublishPostProcessors() verwenden.

Sie können empfangene Nachrichten auch mit der setAfterReceivePostProcessors() abfangen, die aufgerufen wird, bevor die empfangene Nachricht von einer -Methode zurückgegeben wird.

Der Listener-Container unterstützt auch MPPs nach dem Empfang und vor der Übermittlung an den Listener über seine setAfterReceivePostProcessors()-Methode.

+0

Danke, werde es ausprobieren. – basu76

Verwandte Themen