Implementare un criterio di ripetizione dei tentativi con Java

Qualsiasi applicazione eseguita nel cloud o comunica con servizi e risorse remoti deve essere in grado di gestire gli errori temporanei. È comune che queste applicazioni verifichino errori a causa di una perdita momentanea della connettività di rete, di un timeout della richiesta quando un servizio o una risorsa è occupato o altri fattori. Gli sviluppatori devono creare applicazioni per gestire in modo trasparente gli errori temporanei per migliorare la stabilità e la resilienza.

Questo articolo illustra come usare la libreria client Archiviazione di Azure per Java per configurare un criterio di ripetizione dei tentativi per un'applicazione che si connette a Archiviazione BLOB di Azure. I criteri di ripetizione dei tentativi definiscono il modo in cui l'applicazione gestisce le richieste non riuscite e devono essere sempre ottimizzate per soddisfare i requisiti aziendali dell'applicazione e la natura dell'errore.

Configurare le opzioni di ripetizione dei tentativi

I criteri di ripetizione dei tentativi per l'archiviazione BLOB vengono configurati a livello di codice, offrendo il controllo sulla modalità di applicazione delle opzioni di ripetizione ai vari scenari e richieste di servizio. Ad esempio, un'app Web che invia richieste in base all'interazione dell'utente potrebbe implementare un criterio con meno tentativi e ritardi più brevi per aumentare la velocità di risposta e notificare all'utente quando si verifica un errore. In alternativa, un'app o un componente che esegue richieste batch in background potrebbe aumentare il numero di tentativi e usare una strategia di backoff esponenziale per consentire il completamento corretto del tempo di richiesta.

Nella tabella seguente sono elencati i parametri disponibili quando si costruisce un'istanza RequestRetryOptions , insieme al tipo, a una breve descrizione e al valore predefinito se non si apportano modifiche. Dovresti essere proattivo nell'ottimizzazione dei valori di queste proprietà per soddisfare le esigenze della tua app.

Proprietà Type Descrizione Default value
retryPolicyType RetryPolicyType Facoltativo. Approccio da usare per calcolare i ritardi di ripetizione dei tentativi. ESPONENZIALE
maxTries Intero Facoltativo. Numero massimo di tentativi prima di rinunciare. 4
tryTimeoutInSeconds Intero Facoltativo. Tempo massimo consentito prima dell'annullamento di una richiesta e presupposto non riuscito. Si noti che il timeout si applica alla richiesta di operazione, non alla fine dell'operazione complessiva. Questo valore deve essere basato sulla larghezza di banda disponibile per il computer host e sulla prossimità al servizio di archiviazione. Un buon punto di partenza potrebbe essere di 60 secondi per MB di dimensioni previste del payload. Integer.MAX_VALUE (secondi)
retryDelayInMs Lungo Facoltativo. Specifica la quantità di ritardo da utilizzare prima di ripetere un'operazione. 4 ms per ESPONENZIALE, 30 ms per FIXED
maxRetryDelayInMs Lungo Facoltativo. Specifica il ritardo massimo consentito prima di ripetere un'operazione. 120 ms
secondaryHost String Facoltativo. Endpoint dell'account di archiviazione secondario per ritentare le richieste. Prima di impostare questo valore, è necessario comprendere i problemi relativi alla lettura di dati obsoleti e potenzialmente incoerenti. Per altre informazioni, vedere Usare la ridondanza geografica per progettare applicazioni a disponibilità elevata. None

Nell'esempio di codice seguente vengono configurate le opzioni di ripetizione dei tentativi in un'istanza di RequestRetryOptions e passatela a BlobServiceClientBuilder per creare un oggetto client:

RequestRetryOptions retryOptions = new RequestRetryOptions(RetryPolicyType.FIXED, 2, 3, 1000L, 1500L, null);
BlobServiceClient client = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(credential)
        .retryOptions(retryOptions)
        .buildClient();

In questo esempio ogni richiesta di servizio generata dall'oggetto BlobServiceClient usa le opzioni di ripetizione dei tentativi, come definito nell'istanza RequestRetryOptions di . Questo criterio si applica alle richieste client. È possibile configurare diverse strategie di ripetizione dei tentativi per i client del servizio in base alle esigenze dell'app.

  • Per indicazioni sull'architettura e procedure consigliate generali per i criteri di ripetizione dei tentativi, vedere Gestione degli errori temporanei.
  • Per indicazioni sull'implementazione di un modello di ripetizione dei tentativi per gli errori temporanei, vedere Modello di ripetizione dei tentativi.