从SQS队列接收消息时获取套接字超时异常

时间:2018-07-10 21:24:41

标签: java amazon-web-services sockets aws-sdk amazon-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. 用于ReceiveMessageRequest的waitTimeSeconds是SQS默认值为 20秒
  2. 请求的套接字超时是AmazonHttpClient的默认 50秒。 (从上一次读取开始50秒后也会看到异常)
  3. 请求中可以接收的最大邮件数设置为 10 条消息。
  4. 使用的AWS开发工具包版本: 1.10.24 (aws-java-sdk-sqs-1.10.24.jar)

非常感谢您提供有关如何进一步解决或调试此问题的帮助。让我知道是否需要更多详细信息。

0 个答案:

没有答案