class QueueBuffer
extends java.lang.Object
SendMessage
,
DeleteMessage
, ChangeMessageVisibility
) requests to the queue and pre-fetches
messages to receive. In practice, the buffer does almost no work itself, and delegates it to
SendQueueBufer and ReceiveQueueBuffer classes.
Any errors encountered are passed through to the callers, either as the appropriate Result objects or as exceptions.
When the buffer is not used, all internal processing associated with the buffer stops when any outstanding request to SQS completes. In that idle state, the buffer uses neither connections nor threads.
Instances of QueueBuffer
are thread-safe.
Modifier and Type | Class and Description |
---|---|
private static class |
QueueBuffer.DaemonThreadFactory
We need daemon threads in our executor so that we don't keep the process running if our
executor threads are the only ones left in the process.
|
Modifier and Type | Field and Description |
---|---|
(package private) QueueBufferConfig |
config |
(package private) static java.util.concurrent.ExecutorService |
executor
This executor that will be shared among all queue buffers.
|
private AmazonSQSAsync |
realSqs |
private ReceiveQueueBuffer |
receiveBuffer |
private SendQueueBuffer |
sendBuffer |
Constructor and Description |
---|
QueueBuffer(QueueBufferConfig paramConfig,
java.lang.String url,
AmazonSQSAsync sqs) |
Modifier and Type | Method and Description |
---|---|
private boolean |
canBeRetrievedFromQueueBuffer(ReceiveMessageRequest rq)
We prefetch and load results in the buffer by making basic requests.
|
java.util.concurrent.Future<ChangeMessageVisibilityResult> |
changeMessageVisibility(ChangeMessageVisibilityRequest request,
AsyncHandler<ChangeMessageVisibilityRequest,ChangeMessageVisibilityResult> handler)
asynchronously adjust a message's visibility timeout to SQS.
|
ChangeMessageVisibilityResult |
changeMessageVisibilitySync(ChangeMessageVisibilityRequest request)
Changes visibility of a message in SQS.
|
java.util.concurrent.Future<DeleteMessageResult> |
deleteMessage(DeleteMessageRequest request,
AsyncHandler<DeleteMessageRequest,DeleteMessageResult> handler)
Asynchronously deletes a message from SQS.
|
DeleteMessageResult |
deleteMessageSync(DeleteMessageRequest request)
Deletes a message from SQS.
|
private boolean |
hasRequestedMessageAttributes(ReceiveMessageRequest rq) |
private boolean |
hasRequestedQueueAttributes(ReceiveMessageRequest rq) |
private boolean |
isBufferingEnabled() |
java.util.concurrent.Future<ReceiveMessageResult> |
receiveMessage(ReceiveMessageRequest rq,
AsyncHandler<ReceiveMessageRequest,ReceiveMessageResult> handler)
Submits a request to receive some messages from SQS.
|
ReceiveMessageResult |
receiveMessageSync(ReceiveMessageRequest rq)
Retrieves messages from an SQS queue.
|
java.util.concurrent.Future<SendMessageResult> |
sendMessage(SendMessageRequest request,
AsyncHandler<SendMessageRequest,SendMessageResult> handler)
asynchronously enqueues a message to SQS.
|
SendMessageResult |
sendMessageSync(SendMessageRequest request)
Sends a message to SQS and returns the SQS reply.
|
void |
shutdown()
Shuts down the queue buffer.
|
private <ResultType> |
waitForFuture(java.util.concurrent.Future<ResultType> future)
this method carefully waits for futures.
|
private final SendQueueBuffer sendBuffer
private final ReceiveQueueBuffer receiveBuffer
private final AmazonSQSAsync realSqs
QueueBufferConfig config
static java.util.concurrent.ExecutorService executor
QueueBuffer(QueueBufferConfig paramConfig, java.lang.String url, AmazonSQSAsync sqs)
public java.util.concurrent.Future<SendMessageResult> sendMessage(SendMessageRequest request, AsyncHandler<SendMessageRequest,SendMessageResult> handler)
public SendMessageResult sendMessageSync(SendMessageRequest request)
public java.util.concurrent.Future<DeleteMessageResult> deleteMessage(DeleteMessageRequest request, AsyncHandler<DeleteMessageRequest,DeleteMessageResult> handler)
public DeleteMessageResult deleteMessageSync(DeleteMessageRequest request)
public java.util.concurrent.Future<ChangeMessageVisibilityResult> changeMessageVisibility(ChangeMessageVisibilityRequest request, AsyncHandler<ChangeMessageVisibilityRequest,ChangeMessageVisibilityResult> handler)
public ChangeMessageVisibilityResult changeMessageVisibilitySync(ChangeMessageVisibilityRequest request)
public java.util.concurrent.Future<ReceiveMessageResult> receiveMessage(ReceiveMessageRequest rq, AsyncHandler<ReceiveMessageRequest,ReceiveMessageResult> handler)
public ReceiveMessageResult receiveMessageSync(ReceiveMessageRequest rq)
public void shutdown()
private boolean canBeRetrievedFromQueueBuffer(ReceiveMessageRequest rq)
private boolean hasRequestedQueueAttributes(ReceiveMessageRequest rq)
private boolean hasRequestedMessageAttributes(ReceiveMessageRequest rq)
private boolean isBufferingEnabled()
private <ResultType> ResultType waitForFuture(java.util.concurrent.Future<ResultType> future)