People who don't want to send ChangeMessageVisibility
request at all (which reset current visibility timer) and want to rely only on the default queue visibility timeout may use following AmazonSQS wrapper written with the help of lombok:
public AmazonSQS amazonSqs(AWSCredentialsProvider credentialsProvider) {
AmazonSQS amazonSQS = AmazonSQSClientBuilder.standard()
.withRegion(region)
(...)
.build();
return new IgnoringChangeVisibilityAmazonSqs(amazonSQS);
}
@Slf4j
@RequiredArgsConstructor
public class IgnoringChangeVisibilityAmazonSqs implements AmazonSQS {
private interface ChangeVisibilityOperations {
ChangeMessageVisibilityResult changeMessageVisibility(ChangeMessageVisibilityRequest changeMessageVisibilityRequest);
ChangeMessageVisibilityResult changeMessageVisibility(String queueUrl, String receiptHandle, Integer visibilityTimeout);
ChangeMessageVisibilityBatchResult changeMessageVisibilityBatch(ChangeMessageVisibilityBatchRequest request);
ChangeMessageVisibilityBatchResult changeMessageVisibilityBatch(String queueUrl, List<ChangeMessageVisibilityBatchRequestEntry> entries);
}
@Delegate(excludes = ChangeVisibilityOperations.class)
private final AmazonSQS amazonSqs;
@Override
public ChangeMessageVisibilityResult changeMessageVisibility(ChangeMessageVisibilityRequest changeMessageVisibilityRequest) {
log.info("Ignoring ChangeMessageVisibilityRequest");
return new ChangeMessageVisibilityResult();
}
@Override
public ChangeMessageVisibilityResult changeMessageVisibility(String queueUrl, String receiptHandle, Integer visibilityTimeout) {
log.info("Ignoring ChangeMessageVisibilityRequest");
return new ChangeMessageVisibilityResult();
}
@Override
public ChangeMessageVisibilityBatchResult changeMessageVisibilityBatch(ChangeMessageVisibilityBatchRequest request) {
log.info("Ignoring ChangeMessageVisibilityBatchRequest");
return changeMessageVisibilityBatch(request.getQueueUrl(), request.getEntries());
}
@Override
public ChangeMessageVisibilityBatchResult changeMessageVisibilityBatch(String queueUrl, List<ChangeMessageVisibilityBatchRequestEntry> entries) {
log.info("Ignoring ChangeMessageVisibilityBatchRequest");
List<ChangeMessageVisibilityBatchResultEntry> results = entries.stream().map(request ->
new ChangeMessageVisibilityBatchResultEntry().withId(request.getId()))
.collect(Collectors.toList());
return new ChangeMessageVisibilityBatchResult().withSuccessful(results);
}
}