2016-10-21 1 views
1

메시지가 RabbitMQ에 전달되기 전에 template.convertAndSend가 호출되면 메시지를 가로채는 방법이 있습니까?Interceptor를 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() 방법 중 하나를 사용하거나 setBeforePublishPostProcessors()를 사용하여 RabbitTemplate에 하나 더 추가 -

하나를 호출하는 방법은 두 가지가 있습니다.

메서드에서받은 메시지가 반환되기 전에 호출 된 setAfterReceivePostProcessors()을 사용하여받은 메시지를 가로 챌 수도 있습니다.

리스너 컨테이너는 수신 후 수신자에게 전달하기 전에 setAfterReceivePostProcessors() 메소드를 통해 수신자 MPP를 지원합니다.

+0

감사합니다. 시험해 보겠습니다. – basu76

관련 문제