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
Effettuare l'upload di un file via FTP con la libreria FluentFTP di .NET
Velocizzare l'installazione delle dipendenze in un workflow di GitHub
GitHub Actions e Terraform: l'infrastruttura, dalla definizione al deploy
Impostare il tema light o dark utilizzando i CSS
Gestire gli errori di caricamento delle immagini
Taggare la output cache in base al routing in ASP.NET Core
Eseguire uno scroll all'interno di una pagina Blazor
Usare Docusaurus per creare un sito di documentazione
Utilizzare la keyword with in JavaScript
Effettuare un loop di una GitHub Action
Utilizzo di Map e Object in Javascript
Utilizzare le Promise in Javascript - seconda parte
I più letti di oggi
- Taggare la output cache in base al routing in ASP.NET Core
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2022 - Milano e Online
- Silverlight su mobile: Nokia
- Visual Studio 2010 e .NET Framework 4.0: beta 2 e data di release RTM
- Anteprima del Service Pack 1 di WCF RIA Services: spunta il supporto all'italiano
- Disponibile al download la versione finale di Internet Explorer 9
- Windows Phone 'Mango' beta presto nei device ufficiali?