2
com.amazonaws.AmazonClientException: Unable to execute HTTP request: Connection reset
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:324)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:164)
    at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:985)
    at com.amazonaws.services.dynamodb.AmazonDynamoDBClient.batchWriteItem(AmazonDynamoDBClient.java:365)
    .
    .
    .

次のコードサンプルを実行しようとしたときに、上記の例外がキャッチされました。

BatchWriteItemResult result;
BatchWriteItemRequest batchWriteItemRequest = new BatchWriteItemRequest();
do {
    System.out.println("Making the request.");                         
    batchWriteItemRequest.withRequestItems(requestItems);
    result = client.batchWriteItem(batchWriteItemRequest);

    // Print consumed capacity units
    for(Map.Entry<String, BatchWriteResponse> entry : result.getResponses().entrySet()) {
        String tableName = entry.getKey();
        Double consumedCapacityUnits = entry.getValue().getConsumedCapacityUnits();
        System.out.println("Consumed capacity units for table " + tableName + ": " + consumedCapacityUnits);
     }

  // Check for unprocessed keys which could happen if you exceed provisioned throughput
    System.out.println("Unprocessed Put and Delete requests: \n" + result.getUnprocessedItems());
    requestItems = result.getUnprocessedItems();
} while (result.getUnprocessedItems().size() > 0);

8つの書き込みユニットが構成された1つのテーブルがセットアップされています。

私のBatchWriteItemRequest中には9つありPutRequestItemsます。

whileループで初めて、9つのPutRequestItemのうち8つが処理されました。したがって、残りの1つの要求を処理しようとして、ループが再び開始されました。

ただし、コードは result = client.batchWriteItem(batchWriteItemRequest);約149秒間ハングします。その後、上記の例外がスローされます。

これを回避する唯一の方法は、より高い書き込みプロビジョニングユニットを設定することだったようです。ただし、while-doループは、プロビジョニングされた書き込みユニットを超えた場合を処理する方法ではありませんか?

4

2 に答える 2

0

あなたが説明している方法で再試行動作を壊した AWS SDK for Java の 1 つのリリースがありました。基本的に、リクエストの入力ストリームは試行間でリセットされなかったため、各再試行はすぐに失敗しました。DynamoDB は、デフォルトで指数バックオフを使用して 10 回の再試行を行うため、非常に長い遅延が発生します。SDK を更新して、この問題を回避します。

http://aws.amazon.com/sdkforJava/

于 2012-12-06T19:09:59.250 に答える
0

Java Driver v. 1.3.21 (または古いバージョンを含む) のバグのようです。

それを処理するためだけに 1.3.21.1 がリリースされました。

解決された問題

リクエストの再試行中のSocketException

リクエスト ペイロードを利用する Amazon DynamoDB などのサービスのリクエスト ペイロードを、サービス エラー レスポンス (つまり、IO エラーの再試行ではない) によって引き起こされた再試行が正しく再送信できない問題を修正します。

http://aws.amazon.com/releasenotes/Java/5659251433242996を参照してください。

于 2012-12-10T23:04:01.680 に答える