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!
- Why do we receive the same message again and again?
- Why are the messages not deleted?