I am using SQS Batching using a Java client(AmazonSQSBufferedAsyncClient) for sending messages to SQS. I am sending 10 messages in one batch, But SQS monitoring is showing the "Number Of Messages Sent" is 10. Same for "Number Of Messages Received" and "Number Of Messages Deleted" Metric(Showing 10 count, expecting 1).
Below is the code to create a buffered client
final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(SQSConfig.getCreds());
final QueueBufferConfig config = new QueueBufferConfig()
.withMaxBatchOpenMs(10000)
.withMaxBatchSize(10)
.withMaxInflightReceiveBatches(2)
.withMaxDoneReceiveBatches(15);
config.setLongPoll(true);
bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync, config);
Below is the code to send a message.
public void sendBufferMessageInBatch(String message, String messageGroupId) throws ExecutionException, InterruptedException {
SendMessageBatchRequest sqsBatchRequest = new SendMessageBatchRequest();
sqsBatchRequest.setQueueUrl(SQSConfig.endpoint);
List<SendMessageBatchRequestEntry> entryList = Stream.iterate(1, i -> i < 11, i -> i + 1)
.map(numb -> {
String sendMessage = message;
sendMessage = sendMessage + "_" + numb;
sendMessage = sendMessage + "_" + messageGroupId;
SendMessageBatchRequestEntry entry = new SendMessageBatchRequestEntry();
entry.setMessageBody(sendMessage);
entry.setId("id_" + numb);
printSendMessage(sendMessage);
return entry;
})
.collect(Collectors.toList());
sqsBatchRequest.setEntries(entryList);
Future<SendMessageBatchResult> sendBatchMessageFuture = SQSConfig.bufferedSqs.sendMessageBatchAsync(sqsBatchRequest);
}
Questions:
- Why are "Number Of Messages Sent" metrics showing count 10 instead of count 1? (The batch message size is less than 64kb.)
- Whatever count shows on "Number Of Messages Sent" metric, that count is chargeable by aws?
- How can I track the API request that executes by SQS? How is SQS counting the API request while creating the bill?