java - 亚马逊 sqs 抛出异常连接重置

标签 java amazon-web-services amazon-sqs

我正在使用 AmazonSQSAsyncClient 连接 Amazon SQS,但有时我会在日志中看到以下执行:

INFO  [AmazonHttpClient:444] Unable to execute HTTP request: Connection reset
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:168)
    at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
    at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
    at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
    at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:281)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:92)
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:62)
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:254)
    at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:289)
    at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:252)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.receiveResponseHeader(ManagedClientConnectionImpl.java:191)
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:300)
    at com.amazonaws.http.protocol.SdkHttpRequestExecutor.doReceiveResponse(SdkHttpRequestExecutor.java:66)
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:127)
    at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:712)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:517)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:380)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:229)
    at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:2169)
    at com.amazonaws.services.sqs.AmazonSQSClient.getQueueUrl(AmazonSQSClient.java:468)
    at com.amazonaws.services.sqs.AmazonSQSClient.getQueueUrl(AmazonSQSClient.java:1476)

我在整个应用程序中将 AmazonSQSAsyncClient 作为单例使用。

代码片段如下。

static{
        if(sqsObj == null){
        sqsObj = new AmazonSQSAsyncClient(new ClasspathPropertiesFileCredentialsProvider("app.properties"));
        sqsObj.setRegion(Region.getRegion(Regions.valueOf("sample region"));
    }
}

通过使用 sqsobj,我正在执行创建队列、发送消息和接收消息等操作。它工作正常,但有时会抛出上述异常。重新启动应用程序后,它可以正常工作一段时间。

我正在使用 aws-java-sdk-1.7.1。 请对此提出建议。

最佳答案

“连接重置”是指对方(即服务器)关闭了连接。

SDK 在内部构建并重复使用 http 连接,这样您就不必在每次发出请求时都打开连接。

日志消息告诉您连接已重置,但通常无需担心。在这种情况下,SDK 会自动重试。因此,如果您只是偶尔在日志中看到这一点,但一切都按预期工作,您可能不必担心它

关于java - 亚马逊 sqs 抛出异常连接重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24011301/

相关文章:

java - 如何读取文本文件并返回包含数据的网格对象

java - 如何正确使用setDate?

java - JAXB - Beans 到 XSD 还是 XSD 到 beans?

java - 改造:处理数组或单个对象时出现问题

python - AWS lambda : Python function with Pandas dependency

amazon-web-services - AWS Application Load Balancer 未传递 x-forwarded-for header

node.js - 带有graphql和sqs的lambda在nodejs中向sqs发送2条消息?

amazon-ec2 - 保护Amazon EC2 + EBS的步骤

java - AWS 源代码错误?

amazon-dynamodb - DynamoDB 流是这个用例的正确选择吗?