

La AWS SDK per JavaScript v2 è arrivata. end-of-support [Ti consigliamo di migrare alla AWS SDK per JavaScript v3.](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/) [Per ulteriori dettagli e informazioni su come effettuare la migrazione, consulta questo annuncio.](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Riprova la strategia nella v2 AWS SDK per JavaScript
<a name="retry-strategy"></a>

Numerosi componenti di una rete, ad esempio server DNS, switch, sistemi di bilanciamento del carico e altri, possono generare errori in qualsiasi fase del ciclo di vita di una richiesta specifica. La tecnica che viene generalmente utilizzata per gestire queste risposte di errore in un ambiente di rete consiste nell'implementare nuovi tentativi nell'applicazione client. Questa tecnica aumenta l'affidabilità dell'applicazione e riduce i costi operativi per lo sviluppatore. AWS SDKs implementa una logica di ripetizione automatica per le tue AWS richieste.

## Comportamento esponenziale dei tentativi basato sul backoff
<a name="retry-behavior"></a>

La AWS SDK per JavaScript v2 implementa la logica di riprova utilizzando il backoff [esponenziale](https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/#Jitter) con jitter completo per un migliore controllo del flusso. L'idea che sottende al backoff esponenziale è di utilizzare attese progressivamente più lunghe tra i tentativi per le risposte di errore consecutive. Il jitter (ritardo randomizzato) viene utilizzato per prevenire collisioni successive. 

### Test del ritardo tra tentativi in v2
<a name="w2aac18c37b5b5"></a>

Per testare il ritardo di ripetizione nella v2, il codice in [node\$1 modules/aws-sdk/lib/event \$1listeners.js](https://github.com/aws/aws-sdk-js/blob/master/lib/event_listeners.js#L588) è stato aggiornato al valore presente `console.log` nella variabile delay come segue: 

```
// 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();
}
```

#### Ritardi nei tentativi con la configurazione predefinita
<a name="w2aac18c37b5b5b7"></a>

Puoi testare il ritardo per qualsiasi operazione sui client SDK AWS. Chiamiamo `listTables` l'operazione su un client DynamoDB utilizzando il seguente codice:

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

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

Per testare i nuovi tentativi, eseguiamo la simulazione disconnettendo Internet `NetworkingError` dal dispositivo su cui è in esecuzione il codice di test. Puoi anche configurare il proxy per restituire un errore personalizzato.

Durante l'esecuzione del codice, puoi vedere il ritardo tra i tentativi utilizzando il backoff esponenziale con jitter come segue:

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

Poiché retry utilizza il jitter, otterrete valori diversi nell'esecuzione del codice di esempio.

#### Ritenta i ritardi con una base personalizzata
<a name="w2aac18c37b5b5b9"></a>

La AWS SDK per JavaScript v2 consente di passare un numero base personalizzato di millisecondi da utilizzare nel backoff esponenziale per i nuovi tentativi di operazione. Il valore predefinito è 100 ms per tutti i servizi tranne DynamoDB, dove il valore predefinito è 50 ms.

Testiamo i nuovi tentativi con una base personalizzata di 1000 ms nel modo seguente:

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

Effettuiamo la simulazione `NetworkingError` disconnettendo Internet dal dispositivo su cui è in esecuzione il codice di test. Si può notare che i valori del ritardo tra tentativi sono più alti rispetto all'esecuzione precedente, in cui l'impostazione predefinita era di 50 o 100 ms.

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

Poiché retry utilizza il jitter, otterrete valori diversi nell'esecuzione del codice di esempio.

#### Riprova i ritardi con un algoritmo di backoff personalizzato
<a name="w2aac18c37b5b5c11"></a>

La AWS SDK per JavaScript v2 consente inoltre di passare una funzione di backoff personalizzata che accetta un conteggio dei tentativi e un errore e restituisce la quantità di tempo di ritardo in millisecondi. Se il risultato è un valore negativo diverso da zero, non verranno effettuati ulteriori tentativi.

Testiamo la funzione di backoff personalizzata che utilizza un backoff lineare con un valore base di 200 ms come segue:

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

Effettuiamo la simulazione `NetworkingError` disconnettendo Internet dal dispositivo su cui è in esecuzione il codice di test. Come puoi vedere, i valori del ritardo tra tentativi sono multipli di 200.

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