Search code examples
spring-amqpspring-rabbit

Use SpringAOP to intercept send and receive messages


For some reasons, I have to intercept send and receive messages. (Wrap up the message and parse the message when it is received).

I know MessagePostProcessor is a form of interceptor, but it will influence current code. So, I am considering using Spring AOP.

For sending messages, I can simply intercept RabbitTemplate’s send and convertAndSend methods, Like the following code:

@Around("execution(* org.springframework.amqp.rabbit.core.RabbitTemplate.send(..))")

But for receiving messages, Which method is best to intercept? In most cases, RabbitListener is used to receive messages.

Any help is appreciated.


Solution

  • Add an Advice to the listener container's adviceChain. See https://docs.spring.io/spring-amqp/docs/2.2.10.RELEASE/reference/html/#containerAttributes

    EDIT

    @Bean
    public MethodInterceptor advice() {
        return invocation -> {
            Message message = (Message) invocation.getArguments()[0];
            try {
                // before
                invocation.proceed();
                // after
            }
            catch (Exception e) {
                // ...
                throw e;
            }
            finally {
                // ...
            }
            return null;
        };
    }