Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Consuming messages in batches in amazon sqs, alpine sqs spring boot

I had configured SQS listener to consume messages in List of Messages but I am only getting a single message at a time and getting error as cannot convert model.StudentData to the instance of java.util.ArrayList<com.amazonaws.services.sqs.model.Message>

my code is :-

@SqsListener(value = "${queueName}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
    public void receiveMessage(final StudentData studentData,
                               @Header("SenderId") final String senderId, final Acknowledgment acknowledgment) {

        // business logic
        acknowledgment.acknowledge();
    }

Any suggestion on how to configure sqs listener to consume multiple messages

any help will be appreciated

like image 215
Deepak Avatar asked Oct 17 '25 18:10

Deepak


1 Answers

solution for the above issue is :-

final ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(() -> {
        while (true) {
            final String queueUrl = amazonSqs.getQueueUrl("enter your queue name").getQueueUrl();
            final var receiveMessageRequest = new ReceiveMessageRequest(queueUrl)
                    .withWaitTimeSeconds(20);

            List<Message> messages = amazonSqs.receiveMessage(receiveMessageRequest).getMessages();

            while (messages.size() > 0) {
                for (final Message queueMessage : messages) {
                    try {
                        String message = queueMessage.getBody();
                        amazonSqs.deleteMessage(new DeleteMessageRequest(queueUrl, queueMessage
                                .getReceiptHandle()));
                    } catch (Exception e) {
                        log.error("Received message with errors " + e);
                    }
                }
                messages = amazonSqs.receiveMessage(new ReceiveMessageRequest(queueUrl)).getMessages();
            }
        }
    });
        executorService.shutdown();
like image 71
Deepak Avatar answered Oct 20 '25 09:10

Deepak



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!