Получение исключений тайм-аута сокета при получении сообщения из очереди SQS

Нужна помощь с этим исключением из-за тайм-аута сокета, которое я продолжаю получать периодически в моем приложении при попытке прочитать сообщения из очередей AWS SQS.

Процесс:

  1. Я продолжаю вызывать запрос сообщения очереди SQS с временем ожидания сообщения по умолчанию 20 секунд. (AmazonSQSClient.receiveMessage)
  2. Если сообщение не было получено в вышеуказанном запросе, выполняется другой вызов SQS для повторного опроса очереди (тот же запрос на получение сообщения).

Проблема:

Время от времени в моем приложении я получаю следующее исключение в запросах SQS receiveMessage:

com.amazonaws.http.AmazonHttpClient:executeHelper:492 - main - INFO : 
Unable to execute HTTP request: Read timed out
java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method) ~[?:1.8.0_121]
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[?:1.8.0_121]
at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[?:1.8.0_121]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[?:1.8.0_121]
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465) ~[?:1.8.0_121]
at sun.security.ssl.InputRecord.read(InputRecord.java:503) ~[?:1.8.0_121]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) ~[?:1.8.0_121]
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:930) ~[?:1.8.0_121]

Проверяя очередь SQS с консоли, я вижу, что во время сбоев сообщение считывается из очереди (сообщение отправляется в полет), но не получено в конце приложения. Это приводит к блокировке сообщения на время тайм-аута видимости (1 час) и, следовательно, к задержке обработки сообщения.

Дополнительные детали:

  1. waitTimeSeconds для ReceiveMessageRequest - это SQS по умолчанию 20 секунд.
  2. Тайм-аут сокета для запроса - 50 секунд AmazonHttpClient по умолчанию. (Исключение также появляется через 50 секунд после предыдущего чтения)
  3. Максимальное количество сообщений, которые должны быть получены в запросе, установлено на 10 messages.
  4. Используемая версия AWS SDK: 1.10.24 (aws-java-sdk-sqs-1.10.24.jar)

Приветствуется любая помощь в том, как решить или отладить эту проблему. Сообщите мне, если потребуется дополнительная информация.

Где работает этот код? В EC2? Внешний сервер? Внутри приложения на пользовательском устройстве? Мое первое впечатление таково, что это проблема, связанная с сетью, поэтому то, где на самом деле выполняется код, кажется актуальным. Я не знаком с этим конкретным SDK, поэтому возникает вопрос, является ли ваш код новым или старым, и возникла ли сама проблема с момента развертывания кода или это новая проблема с кодом, который исторически работал правильно.

Michael - sqlbot 11.07.2018 11:38

привет @ Michael-sqlbot, спасибо за ответ. Приложение работает только в экземпляре EC2, поэтому я предполагаю, что сеть не должна быть большой проблемой. SDK, который мы используем, на самом деле немного устарел (октябрь 2015 г.), и мы наблюдаем эту проблему уже довольно давно.

face 11.07.2018 14:13
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
896
0

Другие вопросы по теме