package com.netflix.schlep.sqs.consumer; import java.util.concurrent.TimeUnit; import com.netflix.schlep.consumer.IncomingMessage; import com.netflix.schlep.sqs.SqsMessage; import com.netflix.schlep.util.UnstoppableStopwatch; /** * Wrapper for an SQS message and associates the message with an ack strategy * * @author elandau * */ public abstract class SqsIncomingMessage implements IncomingMessage { private final SqsMessage message; private final UnstoppableStopwatch sw; private long visibilityTimeoutInSeconds ; public SqsIncomingMessage(SqsMessage message, UnstoppableStopwatch sw, long visibilityTimeoutInSeconds) { this.message = message; this.sw = sw; this.visibilityTimeoutInSeconds = visibilityTimeoutInSeconds; } @Override public long getTimeSinceReceived(TimeUnit units) { return sw.elapsed(units); } public SqsMessage getMessage() { return message; } void extendVisibilityTimeout(long amount, TimeUnit units) { this.visibilityTimeoutInSeconds += TimeUnit.SECONDS.convert(amount, units); } long getVisibilityTimeout(TimeUnit units) { return units.convert(this.visibilityTimeoutInSeconds, TimeUnit.SECONDS); } }