

Die AWS SDK für JavaScript Version 2 ist erreicht end-of-support. Wir empfehlen Ihnen, auf [AWS SDK für JavaScript Version 3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/) zu migrieren. Weitere Einzelheiten und Informationen zur Migration finden Sie in dieser [Ankündigung](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Strategie in der Version 2 wiederholen AWS SDK für JavaScript
<a name="retry-strategy"></a>

Zahlreiche Komponenten im Netzwerk, wie z. B. DNS-Server, Switches und Load Balancer, können irgendwann im Lebenszyklus einer Anforderung Fehler generieren. Die übliche Methode zum Umgang mit diesen Fehlermeldungen in einer vernetzten Umgebung besteht darin, Wiederholversuche in der Client-Anwendung zu implementieren. Diese Technik erhöht die Zuverlässigkeit der Anwendung und senkt die Betriebskosten für den Entwickler. AWS SDKs implementieren Sie eine automatisierte Wiederholungslogik für Ihre AWS Anfragen.

## Exponentielles Backoff-basiertes Wiederholungsverhalten
<a name="retry-behavior"></a>

Die AWS SDK für JavaScript Version v2 implementiert eine Wiederholungslogik, die [exponentielles Backoff mit vollem Jitter verwendet, um den Datenfluss besser kontrollieren](https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/#Jitter) zu können. Die Idee hinter dem exponentiellen Backoff ist, bei aufeinander folgenden Fehlermeldungen progressiv längere Wartezeiten zwischen den Wiederholversuchen zu verwenden. Der Jitter (randomisierte Verzögerung) wird verwendet, um aufeinanderfolgende Kollisionen zu verhindern. 

### Die Verzögerung beim erneuten Versuch wird in Version 2 getestet
<a name="w2aac18c37b5b5"></a>

Um die Wiederholungsverzögerung in v2 zu testen, wurde der Code in [node\$1 modules/aws-sdk/lib/event \$1listeners.js](https://github.com/aws/aws-sdk-js/blob/master/lib/event_listeners.js#L588) wie folgt auf `console.log` den Wert aktualisiert, der in der variablen Verzögerung vorhanden ist: 

```
// delay < 0 is a signal from customBackoff to skip retries
if (willRetry && delay >= 0) {
  resp.error = null;
  console.log('retry delay: ' + delay);
  setTimeout(done, delay);
} else {
  done();
}
```

#### Verzögerungen bei Wiederholungsversuchen mit der Standardkonfiguration
<a name="w2aac18c37b5b5b7"></a>

Sie können die Verzögerung für jeden Vorgang auf AWS-SDK-Clients testen. Wir rufen `listTables` Operation auf einem DynamoDB-Client mit dem folgenden Code auf:

```
import AWS from "aws-sdk";

const region = "us-east-1";
const client = new AWS.DynamoDB({ region });
await client.listTables({}).promise();
```

Um Wiederholungen zu testen, simulieren wir, `NetworkingError` indem wir die Internetverbindung von dem Gerät trennen, auf dem der Testcode ausgeführt wird. Sie können den Proxy auch so einrichten, dass er einen benutzerdefinierten Fehler zurückgibt.

Wenn Sie den Code ausführen, können Sie die Verzögerung beim erneuten Versuch mithilfe eines exponentiellen Backoffs mit Jitter wie folgt feststellen:

```
retry delay: 7.39361151766359
retry delay: 9.0672860785882
retry delay: 134.89340825668168
retry delay: 398.53559817403965
retry delay: 523.8076165896343
retry delay: 1323.8789643058465
```

Da Retry Jitter verwendet, erhalten Sie bei der Ausführung des Beispielcodes unterschiedliche Werte.

#### Wiederholungsverzögerungen mit benutzerdefinierter Basis
<a name="w2aac18c37b5b5b9"></a>

Die AWS SDK für JavaScript Version v2 ermöglicht die Übergabe einer benutzerdefinierten Basiszahl von Millisekunden, die im exponentiellen Backoff für Wiederholungsversuche verwendet werden kann. Der Standardwert ist 100 ms für alle Dienste außer DynamoDB, wo der Standardwert 50 ms beträgt.

Wir testen Wiederholungen mit einer benutzerdefinierten Basis von 1000 ms wie folgt:

```
...
const client = new AWS.DynamoDB({ region, retryDelayOptions: { base: 1000 } });
...
```

Wir simulieren, `NetworkingError` indem wir das Internet von dem Gerät trennen, auf dem der Testcode ausgeführt wird. Sie können sehen, dass die Werte für die Wiederholungsverzögerung höher sind als bei der vorherigen Ausführung, bei der die Standardeinstellung 50 oder 100 ms betrug.

```
retry delay: 356.2841549924913
retry delay: 1183.5216495444615
retry delay: 2266.997988094194
retry delay: 1244.6948354966453
retry delay: 4200.323030066383
```

Da bei der Wiederholung Jitter verwendet wird, erhalten Sie bei der Ausführung des Beispielcodes unterschiedliche Werte.

#### Wiederholungsverzögerungen mit benutzerdefiniertem Backoff-Algorithmus
<a name="w2aac18c37b5b5c11"></a>

Die AWS SDK für JavaScript Version v2 ermöglicht auch die Übergabe einer benutzerdefinierten Backoff-Funktion, die Zählung und Fehler bei Wiederholungsversuchen akzeptiert und die Dauer der Verzögerung in Millisekunden zurückgibt. Wenn das Ergebnis ein negativer Wert ungleich Null ist, werden keine weiteren Wiederholungsversuche unternommen.

Wir testen die benutzerdefinierte Backoff-Funktion, die einen linearen Backoff mit einem Basiswert von 200 ms verwendet, wie folgt:

```
...
const client = new AWS.DynamoDB({
  region,
  retryDelayOptions: { customBackoff: (count, error) => (count + 1) * 200 },
});
...
```

Wir simulieren, `NetworkingError` indem wir das Internet von dem Gerät trennen, auf dem der Testcode ausgeführt wird. Sie können sehen, dass die Werte für die Verzögerung beim erneuten Versuch ein Vielfaches von 200 sind.

```
retry delay: 200
retry delay: 400
retry delay: 600
retry delay: 800
retry delay: 1000
```