2016-10-21 5 views
1

メッセージがRabbitMQに配信される前に、template.convertAndSendが呼び出されると、メッセージを傍受する方法はありますか?Spring AMQPでインターセプタを使用する方法

また、ハンドラに到達する前にメッセージを傍受する方法はありますか?

パブリッシャー用のPostProcessorを使用してメッセージを処理できますが、インターセプターを使用することをお勧めします。

public class TestPostProcessor implements MessagePostProcessor { 

    @Autowired 
    Tracer defaultTracer; 

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

+0

'> PostProcessorをパブリッシャに使用してメッセージを処理できますが、インターセプタを使用することをお勧めします。 MPPはインターセプタの一形態です。リスナコンテナは、受信後、およびリスナへの配送前にMPPをサポートします: 'setAfterReceivePostProcessors()'。 –

+0

それを使用するには、rabbitTemplate.convertAndSend(routingKey、 "Message"、postProcessor);私たちがここにそれを提供する必要なく、これを注入する方法があるのだろうかと思っていました。また、SimpleMessageListenerContainerでどうやってやりますか? – basu76

+0

はい。私の答えを見てください。 –

答えて

2

MessagePostProcessorはインターセプタの一種です。

MPPを引数とするオーバーロードされたconvertAndSend()メソッドのうちの1つを使用する方法と、setBeforePublishPostProcessors()を使用してRabbitTemplateに1つ以上を追加する方法の2つがあります。

メソッドから受信したメッセージが返される前に呼び出されるsetAfterReceivePostProcessors()を使用して、受信したメッセージを傍受することもできます。

リスナーコンテナは、受信後、リスナへの配信前に、setAfterReceivePostProcessors()メソッドを使用してMPPをサポートします。

+0

ありがとう、試してみます。 – basu76

関連する問題