Nello script precedente abbiamo parlato della gestione degli errori, in una comunicazione gRPC, attraverso l'utilizzo di una retry policy. Questa, configurata al momento della creazione del canale, permette di gestire un possibile errore di comunicazione e riprovare autonomamente dopo il tempo prestabilito.
Un'altra modalità, disponibile con ASP.NET Core 6 e non cumulabile con la retry policy, è la creazione di una hedging policy. Diversamente da quanto visto fin ora, lo scopo di questa policy è di eseguire più volte la stessa chiamata in parallelo, senza attendere una risposta, per poi restituire il primo risultato utile, solo quando una di queste risulterà completata con successo.
Come possiamo già intuire non tutte le chiamate possono essere effettuate con questa logica, ma solamente quelle che, anche se ripetute, non variano lo stato dell'applicazione, come l'aggiornamento di un oggetto o il settaggio di un valore a true o false, viceversa non è adatto per operazioni additive o di eliminazione. Inoltre questa pratica potrebbe aumentare il carico sul server, dato che verranno eseguite sempre lo stesso numero di chiamate.
Vediamo come abilitare la hedging policy attraverso la class MethodConfig
var defaultMethodConfig = new MethodConfig { Names = { MethodName.Default }, HedgingPolicy = new HedgingPolicy { MaxAttempts = 5, HedgingDelay = TimeSpan.FromSeconds(3), NonFatalStatusCodes = { StatusCode.Unavailable } } }; var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions { ServiceConfig = new ServiceConfig { MethodConfigs = { defaultMethodConfig } } });
La configurazione permette il settaggio di vari parametri:
- MaxAttemps: numero totale di chiamate eseguite, inclusa l'originale
- HedgingDelay: tempo di attesa, successivo alla prima chiamata, prima di effettuare le rimanenti. Default: 0
- NonFatalStatusCodes: errore consentiti, nel caso in cui venga ricevuto un errore dichiarato in questa proprietà il flusso di hedge calls proseguirà, viceversa verrà restituito all'applicazione interrompendo tutte le chiamate
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Proteggere le risorse Azure con private link e private endpoints
Usare il colore CSS per migliorare lo stile della pagina
Utilizzare Hybrid Cache in .NET 9
Creare una libreria CSS universale - Rotazione degli elementi
Gestire il colore CSS con HWB
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Generare un hash con SHA-3 in .NET
Eseguire script pre e post esecuzione di un workflow di GitHub
Triggerare una pipeline su un altro repository di Azure DevOps
Gestione file Javascript in Blazor con .NET 9
Generare la software bill of material (SBOM) in GitHub
Gestire la cancellazione di una richiesta in streaming da Blazor