Tentativi e timeout - AWS SDK for .NET

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à.

Tentativi e timeout

AWS SDK for .NETConsente di configurare il numero di tentativi e i valori di timeout per le richieste HTTP ai servizi. AWS Se i valori predefiniti per i nuovi tentativi e il timeout non sono appropriati per la tua applicazione, puoi regolarli in base alle tue esigenze, tuttavia è importante comprendere che questa modifica può influire sul comportamento dell'applicazione.

Per determinare i valori da utilizzare per i nuovi tentativi e i timeout, considera quanto segue:

  • Come devono reagire l'applicazione AWS SDK for .NET e la vostra applicazione quando la connettività di rete peggiora o un AWS servizio non è raggiungibile? Preferisci che i tentativi di chiamata si interrompano presto o che continuino automaticamente?

  • La tua applicazione è o sito Web o un'applicazione rivolta agli utenti che deve essere reattiva o è un processo di elaborazione in background con una maggiore tolleranza rispetto alle latenze più lunghe?

  • L'applicazione è distribuita su una rete affidabile con bassa latenza o viene distribuita in una posizione remota con connettività inaffidabile?

Tentativi

Panoramica

AWS SDK for .NETPossono riprovare le richieste che non vanno a buon fine a causa di limitazioni sul lato server o interruzioni delle connessioni. Esistono due proprietà delle classi di configurazione del servizio che è possibile utilizzare per specificare il comportamento di ripetizione dei tentativi di un client di servizio. Le classi di configurazione del servizio ereditano queste proprietà dall'astratto Amazon.Runtime. ClientConfigclasse dell'API Reference: AWS SDK for .NET

  • MaxErrorRetryspecifica il numero di tentativi consentiti a livello di client di servizio; l'SDK riprova l'operazione il numero di volte specificato prima di fallire e generare un'eccezione.

    Il valore predefinito per l'applicazione può essere controllato utilizzando la variabile di AWS_MAX_ATTEMPTS ambiente o l'impostazione max_attempts nel file di configurazione condiviso. AWS

Le descrizioni dettagliate di queste proprietà sono disponibili nell'estratto Amazon.Runtime. ClientConfigclasse dell'API Reference. AWS SDK for .NET Ogni valore di RetryMode corrisponde per impostazione predefinita a un particolare valore diMaxErrorRetry, come illustrato nella tabella seguente.

RetryMode Corresponding MaxErrorRetry (Amazon DynamoDB) Corresponding MaxErrorRetry (all others)
Legacy 10 4
Standard 10 2
Adaptive (experimental) 10 2

Comportamento

All'avvio dell'applicazione

All'avvio dell'applicazione, i valori predefiniti per RetryMode e MaxErrorRetry vengono configurati dall'SDK. Questi valori predefiniti vengono utilizzati quando si crea un client di servizio, a meno che non si specifichino altri valori.

  • Se le proprietà non sono impostate nell'ambiente, l'impostazione predefinita per RetryMode è configurata come Legacy e l'impostazione predefinita per MaxErrorRetry è configurata con il valore corrispondente della tabella precedente.

  • Se la modalità di riprova è stata impostata nell'ambiente in uso, tale valore viene utilizzato come valore predefinito per. RetryMode Il valore predefinito per MaxErrorRetry è configurato con il valore corrispondente della tabella precedente, a meno che nell'ambiente in uso non sia stato impostato anche il valore per il numero massimo di errori (descritto di seguito).

  • Se il valore per il numero massimo di errori è stato impostato nell'ambiente, tale valore viene utilizzato come valore predefinito perMaxErrorRetry. Amazon DynamoDB è l'eccezione a questa regola; il valore DynamoDB predefinito MaxErrorRetry per è sempre il valore della tabella precedente.

Durante l'esecuzione dell'applicazione

Quando si crea un client di servizio, è possibile utilizzare i valori predefiniti per RetryMode eMaxErrorRetry, come descritto in precedenza, oppure specificare altri valori. Per specificare altri valori, crea e includi un oggetto di configurazione del servizio come AmazonDynamodbConfig o AmazonSQSCONfig quando crei il client del servizio.

Questi valori non possono essere modificati per un client di servizio dopo la sua creazione.

Considerazioni

Quando si verifica un nuovo tentativo, la latenza della richiesta aumenta. Devi configurare i nuovi tentativi in base ai limiti dell'applicazione in termini di latenza della richiesta totale e percentuali di errore.

Timeout

AWS SDK for .NETConsente di configurare il timeout della richiesta e i valori di timeout di lettura/scrittura del socket a livello del client di servizio. Questi valori sono specificati nelle ReadWriteTimeout proprietà Timeout e dell'oggetto astratto Amazon.Runtime. ClientConfigclasse. Questi valori vengono trasmessi come ReadWriteTimeout proprietà Timeout e degli HttpWebRequestoggetti creati dall'oggetto client del AWS servizio. Per impostazione predefinita, il valore Timeout è di 100 secondi e il valore ReadWriteTimeout è di 300 secondi.

Se la rete ha una latenza elevata o se esistono condizioni che causano la ripetizione di un'operazione, l'utilizzo di valori lunghi per il timeout e di un elevato numero di tentativi può far sì che alcune operazioni dell'SDK sembrino non rispondere.

Nota

La versione di destinata alla AWS SDK for .NET Portable Class Library (PCL) utilizza la HttpClientclasse anziché la HttpWebRequest classe e supporta solo la proprietà Timeout.

Di seguito sono elencate le eccezioni per i valori di timeout predefiniti. Questi valori vengono sovrascritti quando imposti esplicitamente i valori di timeout.

Esempio

L'esempio seguente mostra come specificare la modalità di riprova standard, un massimo di 3 tentativi, un timeout di 10 secondi e un timeout di lettura/scrittura di 10 secondi (se applicabile). Al costruttore AmazonS3Client viene assegnato un oggetto AmazonS3Config.

var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK for .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });