Я создал собственный SqsTemplate с режимом ручного подтверждения:
Код: Выделить всё
@Configuration
public class AwsServicesConfig {
@Bean
public SqsTemplate customSqsTemplate(SqsAsyncClient sqsAsyncClient) {
return SqsTemplate.builder()
.sqsAsyncClient(sqsAsyncClient)
.configure(options -> options
// NOTE: manual ACK mode
.acknowledgementMode(TemplateAcknowledgementMode.MANUAL)
).build();
}
}
Код: Выделить всё
public List processMessages() {
var processedMessages = new ArrayList();
var messages = customSqsTemplate.receiveMany(from -> from.queue("my-queue")
.maxNumberOfMessages(10),
String.class
);
while (!messages.isEmpty()) {
messages.forEach(message -> {
doProcess(message);
processedMessages.add(message);
// HERE I want to send an ack to the source queue
});
messages = sqsTemplate.receiveMany(from ->
from.queue(mcSendProperties.getSqs().getDlqUrl())
.maxNumberOfMessages(MAX_NUMBER_OF_MESSAGES),
String.class
);
}
return processedMessages;
}
https://github.com/awspring/spring-clou ... in/spring- cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/operations/SqsTemplateTests.java#L770
Подробнее здесь: https://stackoverflow.com/questions/778 ... ent-how-to
Мобильная версия