Avvio rapido: aggiungere flag di funzionalità a un servizio in background .NET
In questa guida introduttiva si incorpora la funzionalità di gestione delle funzionalità di Configurazione app di Azure in un servizio in background .NET. Si usa Configurazione app per archiviare e gestire centralmente i flag di funzionalità.
Prerequisiti
Il supporto per la gestione delle funzionalità estende la funzionalità di configurazione dinamica in Configurazione app. L’esempio di questa guida introduttiva si basa sull’app del servizio in background .NET introdotta nell'esercitazione sulla configurazione dinamica. Prima di continuare, completare l’esercitazione seguente per creare prima un’app del servizio in background .NET con configurazione dinamica.
Aggiungere un flag di funzionalità
Aggiungere un flag di funzionalità chiamato Beta all’archivio di Configurazione app e lasciare Etichetta e Descrizione con i relativi valori predefiniti. Per altre informazioni su come aggiungere flag di funzionalità a un archivio usando il portale di Azure o l’interfaccia della riga di comando, vedere Creare un flag di funzionalità.
Usare il flag di funzionalità
Aggiungere riferimenti al pacchetto NuGet
Microsoft.FeatureManagement
eseguendo il comando seguente:dotnet add package Microsoft.FeatureManagement
Eseguire il comando seguente per ripristinare i pacchetti per il progetto:
dotnet restore
Aprire Program.cs e aggiungere l’istruzione seguente:
using Microsoft.FeatureManagement;
Aggiungere una chiamata al metodo
UseFeatureFlags
all’interno della chiamataAddAzureAppConfiguration
e registrare i servizi di gestione delle funzionalità.// Existing code in Program.cs // ... ... builder.Configuration.AddAzureAppConfiguration(options => { options.Connect(Environment.GetEnvironmentVariable("ConnectionString")); // Use feature flags options.UseFeatureFlags(); // Register the refresher so that the Worker service can consume it through dependency injection builder.Services.AddSingleton(options.GetRefresher()); }); // Register feature management services builder.Services.AddFeatureManagement(); // The rest of existing code in Program.cs // ... ...
Suggerimento
Quando non viene passato alcun parametro al metodo
UseFeatureFlags
, questo carica tutti i flag di funzionalità con nessuna etichetta nell’archivio di Configurazione app. L’intervallo di aggiornamento predefinito dei flag di funzionalità è di 30 secondi. È possibile personalizzare questo comportamento tramite il parametroFeatureFlagOptions
. Ad esempio, il frammento di codice seguente carica solo i flag di funzionalità che iniziano con TestApp: nel nome della chiave e hanno l’etichetta dev. Il codice modifica anche il tempo dell’intervallo di aggiornamento a 5 minuti. Questo tempo dell’intervallo di aggiornamento è separato da quello per i normali valori chiave.options.UseFeatureFlags(featureFlagOptions => { featureFlagOptions.Select("TestApp:*", "dev"); featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5); });
Aprire Worker.cs e aggiungere l’istruzione seguente:
using Microsoft.FeatureManagement;
Aggiornare il costruttore del servizio
Worker
per ottenere istanze diIConfigurationRefresher
eIFeatureManager
tramite inserimento delle dipendenze.public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private readonly IConfigurationRefresher _refresher; private readonly IFeatureManager _featureManager; public Worker(ILogger<Worker> logger, IConfigurationRefresher refresher, IFeatureManager featureManager) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher)); _featureManager = featureManager ?? throw new ArgumentNullException(nameof(featureManager)); } // ... ... }
Aggiornare il metodo
ExecuteAsync
per registrare un messaggio a seconda dello stato del flag di funzionalità.Il metodo
TryRefreshAsync
viene chiamato all’inizio di ogni iterazione dell’esecuzione dell’attività per aggiornare il flag di funzionalità. Sarà un no-op se la finestra del tempo dell’intervallo di aggiornamento non viene raggiunta. L’operatoreawait
non viene usato in modo che i flag di funzionalità vengano aggiornati senza bloccare l’iterazione corrente dell’esecuzione dell'attività. In tal caso, le iterazioni successive dell’esecuzione dell’attività otterranno il valore aggiornato.protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { // Intentionally not await TryRefreshAsync to avoid blocking the execution. _refresher.TryRefreshAsync(stoppingToken); if (_logger.IsEnabled(LogLevel.Information)) { if (await _featureManager.IsEnabledAsync("Beta")) { _logger.LogInformation("[{time}]: Worker is running with Beta feature.", DateTimeOffset.Now); } else { _logger.LogInformation("[{time}]: Worker is running.", DateTimeOffset.Now); } } await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } }
Compilare ed eseguire l'app in locale
Eseguire il comando seguente per compilare l'app:
dotnet build
Al termine della compilazione, eseguire questo comando per eseguire l'app Web in locale:
dotnet run
Nella console dovrebbero essere visualizzati gli output seguenti.
Accedere al portale di Azure. Selezionare Tutte le risorse e selezionare l’archivio di Configurazione app creato in precedenza.
Selezionare Gestione funzionalità e individuare il flag di funzionalità Beta. Abilitare il flag selezionando la casella di controllo in Abilitato.
Attendere alcuni istanti per permettere alla finestra del tempo dell’intervallo di aggiornamento di passare. Verrà visualizzato il messaggio di log aggiornato.
Pulire le risorse
Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.
Importante
L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.
- Accedere al portale di Azure e selezionare Gruppi di risorse.
- Nella casella Filtra per nome immettere il nome del gruppo di risorse.
- Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
- Selezionare Elimina gruppo di risorse.
- Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.
Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.
Passaggi successivi
In questa guida introduttiva, è stato creato un flag di funzionalità e usato con un servizio in background.
Per abilitare la funzionalità di gestione delle funzionalità per altri tipi di app, continuare con le esercitazioni seguenti.
Per altre informazioni sulla gestione dei flag di funzionalità in Configurazione app di Azure, continuare con l’esercitazione seguente.
Per il rundown completo della funzionalità della libreria di gestione delle funzionalità .NET, continuare con il documento seguente.