Compartilhar via


Início Rápido: adicionar sinalizadores de recursos a um serviço em segundo plano .NET

Nesse início rápido, você incorpora a capacidade de gerenciamento de recursos da Configuração de Aplicativos do Azure em um serviço em segundo plano .NET. Você usa a Configuração de Aplicativos do Azure para armazenar e gerenciar centralmente seus sinalizadores de recursos.

Pré-requisitos

O suporte ao gerenciamento de recursos estende o recurso de configuração dinâmica na Configuração de Aplicativos. O exemplo neste início rápido baseia-se no aplicativo de serviço em segundo plano .NET apresentado no tutorial de configuração dinâmica. Antes de continuar, conclua o tutorial a seguir para criar primeiro um aplicativo de serviço em segundo plano .NET com configuração dinâmica.

Adicionar um sinalizador de recursos

Adicione um sinalizador de recurso chamado Beta ao repositório da Configuração de Aplicativos e deixe o Rótulo e a Descrição com seus valores padrão. Para mais informações sobre como adicionar sinalizadores de recursos a um repositório usando o portal do Azure ou a CLI, acesse Criar um sinalizador de recurso.

Captura de tela mostrando campos para habilitar um sinalizador de recurso chamado Beta.

Usar o sinalizador de recurso

  1. Adicione referências ao pacote Microsoft.FeatureManagement NuGet executando o seguinte comando:

    dotnet add package Microsoft.FeatureManagement
    
  2. Execute o seguinte comando para restaurar pacotes do projeto:

    dotnet restore
    
  3. Abra Program.cs e adicione a seguinte instrução:

    using Microsoft.FeatureManagement;
    
  4. Adicione uma chamada ao método UseFeatureFlags dentro da chamada AddAzureAppConfiguration e registre os serviços de gerenciamento de recursos.

    // Existing code in Program.cs
    // ... ...
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
    
        // 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
    // ... ...
    

    Dica

    Quando nenhum parâmetro é transmitido ao método UseFeatureFlags, ele carrega todos os sinalizadores de recursos sem rótulo no repositório Configuração de Aplicativos. O intervalo de atualização padrão dos sinalizadores de recursos é de 30 segundos. Você pode personalizar esse comportamento com o parâmetro FeatureFlagOptions. Por exemplo, o snippet de código a seguir carrega apenas sinalizadores de recursos que começam com TestApp: em seu nome de chave e têm o rótulo dev. O código também altera o intervalo de atualização para 5 minutos. Observe que esse intervalo de atualização é separado daquele dos valores-chave regulares.

    options.UseFeatureFlags(featureFlagOptions =>
    {
        featureFlagOptions.Select("TestApp:*", "dev");
        featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
    });
    
  5. Abra Worker.cs e adicione a seguinte instrução:

    using Microsoft.FeatureManagement;
    
  6. Atualize o construtor do serviço Worker para obter instâncias de IConfigurationRefresher e IFeatureManager por meio de injeção de dependência.

    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));
        }
    
        // ... ...
    }
    
  7. Atualize o método ExecuteAsync para registrar uma mensagem dependendo do estado do sinalizador do recurso.

    O método TryRefreshAsync é chamado no início de cada iteração da execução da tarefa para atualizar o sinalizador do recurso. Será autônomo se a janela de intervalo de atualização não for atingida. O operador await não é usado para que os sinalizadores de recursos sejam atualizados sem bloquear a iteração atual da execução da tarefa. Nesse caso, as iterações posteriores da execução da tarefa obterão valor atualizado.

    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);
        }
    }
    

Compilar e executar o aplicativo localmente

  1. Execute o comando a seguir para criar o aplicativo:

    dotnet build
    
  2. Depois que a construção for concluída com êxito, execute o seguinte comando para executar o aplicativo localmente:

    dotnet run
    
  3. Você deve ver as seguintes saídas no console.

    Captura de tela do console com serviço em segundo plano em execução e sinalizador de recurso desabilitado.

  4. Entre no portal do Azure. Escolha Todos os recursos e escolha o repositório de Configuração de Aplicativos que você criou anteriormente.

  5. Selecione Gerenciador de recursos e localize o sinalizador de recurso Beta. Habilite o sinalizador marcando a caixa de seleção abaixo de Habilitado.

  6. Aguarde alguns instantes até que o intervalo de atualização passe. Você verá a mensagem de log atualizada.

    Captura de tela do console com serviço em segundo plano em execução e sinalizador de recurso habilitado.

Limpar os recursos

Se não deseja continuar usando os recursos criados neste artigo, exclua o grupo de recursos que você criou aqui para evitar encargos.

Importante

A exclusão de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Não exclua acidentalmente grupo de recursos ou recursos incorretos. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que você deseja manter, exclua cada um individualmente do respectivo painel em vez de excluir o grupo de recursos.

  1. Entre no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
  4. Selecione Excluir grupo de recursos.
  5. Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Insira o nome do grupo de recursos para confirmar e selecione Excluir.

Após alguns instantes, o grupo de recursos e todos os recursos dele são excluídos.

Próximas etapas

Neste início rápido, você criou um sinalizador de recurso e o usou com um serviço em segundo plano.

Para habilitar a funcionalidade de gerenciamento de recursos em outros tipos de aplicativos, continue nos tutoriais a seguir.

Para saber mais sobre como gerenciar sinalizadores de recursos na Configuração de Aplicativos do Azure, continue no tutorial a seguir.

Para obter o resumo completo dos recursos da biblioteca de gerenciamento de recursos .NET, continue para o documento a seguir.