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
Gestire gli accessi con Token su Azure Container Registry
Gestione file Javascript in Blazor con .NET 9
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Gestire i dati con Azure Cosmos DB Data Explorer
Migliorare l'organizzazione delle risorse con Azure Policy
Gestione degli stili CSS con le regole @layer
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Utilizzare Azure Cosmos DB con i vettori
Fornire parametri ad un Web component HTML
Gestione dell'annidamento delle regole dei layer in CSS
Utilizzare Azure AI Studio per testare i modelli AI