I would like to set an interceptor to intercept all SQS messages coming through my app in one place regardless of how many queues I have.
I am using Spring Boot.
via spring-cloud-aws-messaging I am able to do it by extending QueueMessageHandler and passing it to the listener as a handler factory like the following.
public class AwsSQSMessageHandler extends QueueMessageHandler {
public AwsSQSMessageHandler(List<MessageConverter> messageConverters) {
super(messageConverters);
}
@Override
public void handleMessage(Message<?> message) throws MessagingException {
try {
MDC.put("requestId", "RequestId=" + UUID.randomUUID());
super.handleMessage(message);
} finally {
MDC.clear();
}
}
}
@Bean
@Primary
public SimpleMessageListenerContainerFactory simpleMessageListenerContainerFactory(AmazonSQSAsync amazonSqs) {
SimpleMessageListenerContainerFactory factory = new SimpleMessageListenerContainerFactory();
factory.setAmazonSqs(amazonSqs);
factory.setQueueMessageHandler(new AwsSQSMessageHandler(getConverters()));
return factory;
}
How can I do it by apache camel on my spring boot project?
Here is my camel config for 2 queue:
@Component
@RequiredArgsConstructor
public class MessageRoute1 extends RouteBuilder {
private final MessageProcessor1 messageProcessor1;
private final SqsClient sqsClient;
@Override
public void configure() throws Exception {
from(aws2Sqs("queue1").amazonSQSClient(sqsClient)
).process(messageProcessor1);
}
}
@Component
@RequiredArgsConstructor
public class MessageRoute2 extends RouteBuilder {
private final MessageProcessor2 messageProcessor2;
private final SqsClient sqsClient;
@Override
public void configure() throws Exception {
from(aws2Sqs("queue2").amazonSQSClient(sqsClient)
).process(messageProcessor2);
}
}
Do you have any idea How to do the same thing here?