'SQS Message never gets deleted

We do use an SQS to receive notifications from S3, but for some reason we receive the exact same message again and again.

Seems like the message never gets deleted from SQS.

@Component
@RequiredArgsConstructor
public class SqsTimer {

    private final SqsFacade sqsFacade;

    @Scheduled(fixedDelay = 2000)
    public void execute() {
        List<Message> messages;
        do {
            messages = receiveMessages();
            distributeMessages(messages);
            deleteMessages(messages);
        } while (!messages.isEmpty());
    }

    private List<Message> receiveMessages() {
        final ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder()
                .queueUrl("URL")
                .visibilityTimeout(30)
                .build();

        return sqsFacade.getSqsClient()
                .receiveMessage(receiveMessageRequest)
                .messages();
    }

    private void distributeMessages(final List<Message> messages) {
        ...
    }

    private void deleteMessages(final List<Message> messages) {
        messages.forEach(message -> {
            log.debug("Delete message: {}", message.receiptHandle());
            final DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder()
                    .queueUrl("URL")
                    .receiptHandle(message.receiptHandle())
                    .build();
            sqsFacade.getSqsClient().deleteMessage(deleteMessageRequest);
        });
    }
}

The method distributeMessages() completes in under 1 second!

  1. Why do we receive the same message again and again?
  2. Why are the messages not deleted?


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source