
io.cimpress.mcp.streams.sqs.SqsRetryWorker Maven / Gradle / Ivy
package io.cimpress.mcp.streams.sqs;
import com.amazonaws.services.sqs.model.Message;
import com.fasterxml.jackson.databind.ObjectMapper;
import net.logstash.logback.marker.LogstashMarker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import rx.Completable;
import rx.Observable;
import rx.Subscription;
import rx.schedulers.Schedulers;
public class SqsRetryWorker {
private static final Logger LOG = LoggerFactory.getLogger(SqsRetryWorker.class);
public static String RETRY_Q_POSTFIX = "RETRY";
private SqsMessageConsumer consumer;
private Subscription sub;
private ObjectMapper mapper;
private Class inputType;
private SqsMessageProducer processorQProducer;
private SqsMessageProducer producer;
private SqsBackgroundProcessorOptions options;
private String processorQName;
public SqsRetryWorker(String processorQName, SqsBackgroundProcessorOptions options, SqsMessageProducer processorQProducer) {
this.processorQName = processorQName;
this.options = options;
this.mapper = options.mapper;
this.inputType = options.inputType;
this.processorQProducer = processorQProducer;
}
private static void traceMessage(final String msg, final Message message) {
LogstashMarker marker = SqsUtils.buildMarker(message);
LOG.trace(marker, msg);
}
public void stop() {
this.sub.unsubscribe();
}
public void start() {
SqsMessageConsumerOptions consumerOptions = new SqsMessageConsumerOptions().withVisibilityTimeout(options.retryBaseDelaySeconds)
.withMaxNumberOfMessages(options.maxMessages)
.withMaxReads(options.maxRetries)
.withWaitTimeSeconds(options.maxWait);
this.options.dlqName.map(dlqName -> consumerOptions.withDlqName(dlqName));
this.consumer = new SqsMessageConsumer(options.client, SqsUtils.buildQueueName(processorQName, RETRY_Q_POSTFIX), consumerOptions);
this.producer = this.consumer.createProducer(mapper);
Observable
© 2015 - 2025 Weber Informatics LLC | Privacy Policy