AWS Java SDK: AbortedException при вызове AmazonSQSClient.receiveMessage - PullRequest
0 голосов
/ 26 июня 2018

Мы пытаемся читать из очереди Amazon SQS из программы Java, работающей на экземпляре EC2. При случае мы получаем 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.

Любая помощь будет оценена. Благодарю.

1 Ответ

0 голосов
/ 10 декабря 2018

Хотя javadoc на AbortedException является разреженным, это подкласс AmazonClientException & RuntimeException (которые не должны быть объявлены). Кроме того, документ Обработка исключений AWS говорит следующее:

AmazonClientException указывает, что проблема возникла внутри клиентского кода Java, либо при попытке отправить запрос в AWS, либо при попытке проанализировать ответ от AWS. AmazonClientException, как правило, более серьезный, чем AmazonServiceException, и указывает на серьезную проблему, которая не позволяет клиенту выполнять вызовы служб к сервисам AWS. Например, AWS SDK для Java генерирует исключение AmazonClientException, если сетевое соединение недоступно при попытке вызвать операцию на одном из клиентов.

AbortedException обычно генерируется, когда SDK обрабатывает InterruptedException (то есть: потоку было сообщено о прекращении работы ). Однако для ваших целей вы, вероятно, просто хотите повторить операцию.

(Если вы тот, кто делает явное Thread.interrupt, чтобы вызвать это, тогда вам решать, как вы хотите продолжить - либо воспринимайте это как сигнал, чтобы прекратить работу, либо просто повторите операцию)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...