【问题标题】:AWS Java SDK: AbortedException on call to AmazonSQSClient.receiveMessageAWS Java 开发工具包:调用 AmazonSQSClient.receiveMessage 时出现 AbortedException
【发布时间】:2018-06-26 19:37:17
【问题描述】:

我们正在尝试从 EC2 实例上运行的 Java 程序读取 Amazon SQS 队列。有时,我们会收到com.amazonaws.AbortedException。我们的代码如下所示:

AmazonSQSClient sqs = new AmazonSQSClient(myCredentials);
ReceiveMessageRequest request = new ReceiveMessageRequest()
            .withWaitTimeSeconds(20)
            .withMaxNumberOfMessages(1)
            .withQueueUrl(queueUrl);
ReceiveMessageResult result = sqs.receiveMessage(request);

我们的堆栈跟踪如下所示:

com.amazonaws.AbortedException: 
at com.amazonaws.internal.SdkFilterInputStream.abortIfNeeded(SdkFilterInputStream.java:51)
at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:65)
at com.amazonaws.event.ProgressInputStream.read(ProgressInputStream.java:159)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(XMLEntityManager.java:2890)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:674)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1304)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDocumentEntity(XMLEntityManager.java:1255)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.setInputSource(XMLDocumentScannerImpl.java:253)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:199)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.<init>(XMLStreamReaderImpl.java:184)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(XMLInputFactoryImpl.java:277)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(XMLInputFactoryImpl.java:129)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLEventReader(XMLInputFactoryImpl.java:78)
at com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:91)
at com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:43)
at com.amazonaws.http.response.AwsResponseHandlerAdapter.handle(AwsResponseHandlerAdapter.java:70)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleResponse(AmazonHttpClient.java:1501)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1222)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1035)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:747)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:721)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:704)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:672)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:654)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:518)
at com.amazonaws.services.sqs.AmazonSQSClient.doInvoke(AmazonSQSClient.java:1663)
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:1639)
at com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:1269)
at <our code>

com.amazonaws.services.sqs.AmazonSQSClient 的文档没有告诉我们期待 AbortedException。

我们使用的是 SDK 版本 1.11.77。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: java amazon-web-services aws-sdk


    【解决方案1】:

    虽然AbortedException 上的javadoc 是稀疏的,但它是AmazonClientExceptionRuntimeException 的子类(不必声明)。此外,AWS Exception handling docs 表示:

    AmazonClientException 表示 Java 客户端代码内部出现问题,无论是在尝试向 AWS 发送请求时,还是在尝试解析来自 AWS 的响应时。 AmazonClientException 通常比 AmazonServiceException 更严重,表明存在阻止客户端对 AWS 服务进行服务调用的主要问题。例如,当您尝试在其中一个客户端上调用操作时,如果没有可用的网络连接,则适用于 Java 的 AWS 开发工具包会引发 AmazonClientException。

    AbortedException 通常在 SDK 处理 InterruptedException 时抛出(即:the thread was signalled to stop doing work)。不过,出于您的目的,您可能只想重试该操作。

    (如果您是执行明确的Thread.interrupt 导致此问题的人,那么您要如何继续操作取决于您 - 将其视为停止工作的信号,或者只是重试操作)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多