У меня есть модуль, который опрашивает очередь AWS SQS с заданными интервалами по одному сообщению за раз с ReceiveMessageRequest
.Ниже приведен метод:
public static ReceiveMessageResult receiveMessageFromQueue() {
String targetedQueueUrl = sqsClient.getQueueUrl("myAWSqueueName").getQueueUrl();
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(targetedQueueUrl)
.withWaitTimeSeconds(10).withMaxNumberOfMessages(1);
return sqsClient.receiveMessage(receiveMessageRequest);
}
После получения и обработки сообщения оно удаляется из очереди с помощью DeleteMessageResult
.
public static DeleteMessageResult deleteMessageFromQueue(String receiptHandle) {
log.info("Deleting Message with receipt handle - [{}]", receiptHandle);
String targetedQueueUrl = sqsClient.getQueueUrl("myAWSqueueName").getQueueUrl();
return sqsClient.deleteMessage(new DeleteMessageRequest(targetedQueueUrl, receiptHandle));
}
Я создал исполняемый файл JAR.который развернут примерно в 40 экземплярах и активно опрашивает очередь.Я мог видеть, что каждый из них получает сообщения.Но в консоли AWS SQS я вижу только цифры 0, 1, 2 или 3 в столбце «сообщения в полете».Почему это так, даже когда более 40 разных потребителей получают сообщения из очереди?Также количество сообщений, доступных в очереди, уменьшается очень медленно.
Ниже приведены параметры конфигурации очереди.
Default Visibility Timeout: 30 seconds
Message Retention Period: 4 days
Maximum Message Size: 256 KB
Receive Message Wait Time: 0 seconds
Messages Available (Visible): 4,776
Delivery Delay: 0 seconds
Messages in Flight (Not Visible): 2
Queue Type: Standard
Messages Delayed: 0
Content-Based Deduplication: N/A
Почему сообщения не обрабатываются быстро, даже если их несколькопотребители?Нужно ли изменять какие-либо параметры очереди или что-то в запросах на получение / удаление сообщений?Пожалуйста, сообщите.
ОБНОВЛЕНИЕ:
Все экземпляры EC2 и SQS находятся в одном регионе.Потребители (jar-файл, который опрашивает очередь) запускаются как часть сценария запуска экземпляра EC2.И у него есть запланированное задание, которое опрашивает очередь каждые 12 секунд.Прежде чем я помещаю сообщения в очередь, я раскрутил 2-3 экземпляра.(У нас могут быть некоторые уже запущенные экземпляры в это время - это добавляет количество получателей (ограничено до 50) для очереди. При получении сообщения оно выполнит некоторые задачи (включая некоторые операции с БД, анализ данных и вычисления, файл отчета).Генерация и загрузка отчета в S3 и т. д.), и это займет около 10-12 секунд. После этого он удалит сообщение из очереди. Ниже приведен скриншот метрик SQS за последнюю 1 неделю (из SQS).консоль мониторинга).