1

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?

Samet Baskıcı
  • 1,090
  • 3
  • 13
  • 26

0 Answers0