ppbb
ppbb

Reputation: 129

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.

Upvotes: 0

Views: 970

Answers (1)

Gary Russell
Gary Russell

Reputation: 174634

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;
    };
}

Upvotes: 1

Related Questions