当前位置: 首页 > 面试题库 >

AWS Java SDK:调用AmazonSQSClient.receiveMessage时发生AbortedException

裴畅
2023-03-14
问题内容

我们正在尝试从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。

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


问题答案:

尽管on上的javadoc
AbortedException稀疏,但它是AmazonClientException&的子类RuntimeException(不必声明)。另外,AWS
Exception处理文档
说:

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

AbortedException通常在SDK处理时抛出InterruptedException(即:发出信号通知线程停止工作)。但是出于您的目的,您可能只想重试该操作。

(但是,如果您是明确Thread.interrupt执行此操作的人,则取决于您要如何进行-将其视为停止工作的信号,或者只是重试该操作)



 类似资料:
  • 问题内容: 我想这是某种依赖性问题,所以这是我的树: 从我发现的情况来看,Spring 4.1.1应该可以与javax.servlet 3.1.0一起使用,但是 我 在调用response.getStatus( ) 时遇到了 java.lang.NoSuchMethodError:javax.servlet.http.HttpServletResponse.getStatus() )放在我的拦截器

  • 问题内容: 我在Java中为程序使用多线程。我已经成功运行了线程,但是当我使用线程时,它正在抛出。如何使线程等待通知它? 问题答案: 你需要先行一步才能工作。 另外,我建议你查看并发程序包,而不是旧式的线程程序包。它们更安全,更易于使用。 快乐的编码。 编辑 我以为你的意思是,当你尝试在不持有对象锁定的情况下获取访问权限时会发生异常。

  • 问题内容: 我有在Android上运行良好的代码。当我将其移植到具有JRE 1.6的Windows 64位计算机上时,该代码不起作用。 当我运行以下代码行时: 我得到以下异常: java.security.NoSuchAlgorithmException:SHA256 MessageDigest在java.security.MessageDigest.getInstance(未知源)处的java.

  • 问题内容: 我很沮丧 我这样宣布我的集合: 然后我像这样填充它: 然后,我尝试使用它: 我最终得到了这一点: 导致异常的行(堆栈跟踪中的第84行)是这一行: 也许我缺少了一些东西,但是如果声明是并且我正在调用传递值的方法,那么我该如何获取此异常? 这是用于JSF应用程序的模型bean。我正在使用Java 6,Tomcat 6.0.32,mojarra 2.1.14,但是这些都不应该真正重要,因为泛

  • 我是Spring的新手。我正在使用SpringWebMVC开发RESTAPI。对于错误处理,我得到了这个链接http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann rest spring mvc异常 我曾尝试在我的项目中使用ResponseEntityExceptionHand

  • 在调用ANT目标时,我得到以下错误。我尽了最大的努力来解决这个问题,但没有。 [junitreport]正在处理D:\checkouts\guiinstaller\tests-capsinstallertest-suites.xml到D:\checkouts\guiunit.build.junit.report\junit-nof[junitreport]加载样式表jar:file:/d:/che