Tutorial: Uso de la configuración dinámica en un servicio en segundo plano de .NET
Los datos de App Configuration se pueden cargar como Configuración de la aplicación en una aplicación .NET. Para obtener más información, consulte el inicio rápido. Sin embargo, como está diseñado por .NET, la configuración de la aplicación solo se puede actualizar tras el reinicio de la aplicación. El proveedor .NET de App Configuration es una biblioteca .NET Standard. Admite el almacenamiento en caché y la actualización dinámica de la configuración sin reiniciar la aplicación. En este tutorial se muestra cómo puede implementar actualizaciones de configuración dinámicas en un servicio en segundo plano de .NET.
En este tutorial, aprenderá a:
- Configure el servicio en segundo plano de .NET para actualizar su configuración en respuesta a los cambios en un almacén de App Configuration.
- Consuma la configuración más reciente en el servicio en segundo plano.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. cree una de forma gratuita.
- Un almacén de App Configuration. Crear un almacén.
- SDK de .NET 6.0 o posterior: también disponible en Azure Cloud Shell.
Agregar un par clave-valor
Agregue el siguiente par clave-valor al almacén de App Configuration y deje Etiqueta y Tipo de contenido con sus valores predeterminados. Para obtener más información sobre cómo agregar pares clave-valor a un almacén mediante Azure Portal o la CLI, vaya a Creación de un par clave-valor.
Clave | Value |
---|---|
TestApp:Settings:Message | Datos de Azure App Configuration |
Creación de un servicio en segundo plano de .NET
Use la Interfaz de línea de comandos (CLI) de .NET para crear un nuevo proyecto de aplicación de .NET. La ventaja de usar la CLI de .NET frente a Visual Studio es que está disponible en las plataformas Windows, macOS y Linux. También puede usar las herramientas preinstaladas disponibles en Azure Cloud Shell.
Cree una carpeta nueva para su proyecto.
En la nueva carpeta, ejecute el comando siguiente para crear un nuevo proyecto de servicio en segundo plano de .NET:
dotnet new worker
Recarga de datos de App Configuration
Para agregar referencias al paquete NuGet
Microsoft.Extensions.Configuration.AzureAppConfiguration
, ejecute el siguiente comando:dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
Ejecute el siguiente comando para restaurar los paquetes para el proyecto:
dotnet restore
Abra el archivo Program.cs y agregue las siguientes instrucciones:
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.AzureAppConfiguration;
Conéctese a App Configuration mediante Microsoft Entra ID (recomendado) o una cadena de conexión.
Use
DefaultAzureCredential
para autenticarse en el almacén de App Configuration. Siga las instrucciones para asignar la credencial al rol Lector de datos de App Configuration. Asegúrese de dejar tiempo suficiente para que el permiso se propague antes de ejecutar la aplicación.// Existing code in Program.cs // ... ... var builder = Host.CreateApplicationBuilder(args); builder.Configuration.AddAzureAppConfiguration(options => { string endpoint = Environment.GetEnvironmentVariable("Endpoint"); options.Connect(new Uri(endpoint), new DefaultAzureCredential()); // Load all keys that start with `TestApp:`. .Select("TestApp:*") // Configure to reload the key 'TestApp:Settings:Message' if it is modified. .ConfigureRefresh(refreshOptions => { refreshOptions.Register("TestApp:Settings:Message"); }); // Register the refresher so that the Worker service can consume it through DI builder.Services.AddSingleton(options.GetRefresher()); }); // The rest of existing code in Program.cs // ... ...
En el método
ConfigureRefresh
, se registra una clave dentro del almacén de App Configuration para la supervisión de cambios. El métodoRegister
tiene un parámetro booleanorefreshAll
opcional que se puede usar para indicar si se deben actualizar todos los valores de configuración si cambia la clave registrada. En este ejemplo, solo se actualizará la clave TestApp:Settings:Message. Todas las configuraciones registradas para la actualización tienen un tiempo de expiración de la memoria caché predeterminado de 30 segundos antes de que se vuelva a intentar realizar una nueva actualización. Puede actualizarse al llamar al métodoAzureAppConfigurationRefreshOptions.SetCacheExpiration
.Abra Worker.cs. Inserte
IConfiguration
yIConfigurationRefresher
en el servicioWorker
y registre los datos de configuración de App Configuration.public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private readonly IConfiguration _configuration; private readonly IConfigurationRefresher _refresher; public Worker(ILogger<Worker> logger, IConfiguration configuration, IConfigurationRefresher refresher) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher)); } 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)) { _logger.LogInformation(_configuration["TestApp:Settings:Message"] ?? "No data."); } await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken); } } }
La llamada al método
ConfigureRefresh
por sí sola no hará que la configuración se actualice automáticamente. El métodoTryRefreshAsync
se llama desde la interfazIConfigurationRefresher
para desencadenar una actualización. Este diseño es para evitar las solicitudes enviadas a App Configuration incluso cuando la aplicación está inactiva. Puede incluir la llamada aTryRefreshAsync
donde considere que la aplicación está activa. Por ejemplo, puede ser cuando se procesa un mensaje entrante, un pedido o una iteración de una tarea compleja. También puede ser en un temporizador si la aplicación está activa todo el tiempo. En este ejemplo, se llama aTryRefreshAsync
cada vez que se ejecuta el servicio en segundo plano. Tenga en cuenta que, aunque se produzca un error en la llamada aTryRefreshAsync
por cualquier motivo, la aplicación seguirá usando la configuración almacenada en caché. Se realizará otro intento cuando haya pasado el tiempo de expiración de la caché configurada y la actividad de la aplicación vuelva a desencadenar la llamada aTryRefreshAsync
. Llamar aTryRefreshAsync
es una operación sin efecto antes de que pase el tiempo de expiración de la caché configurada, por lo que su impacto en el rendimiento es mínimo, aunque se llame con frecuencia.
Compilación y ejecución de la aplicación en un entorno local
Establezca una variable de entorno.
Establezca la variable de entorno denominada Punto de conexión en el punto de conexión del almacén de App Configuration que se encuentra en la Información general del almacén en Azure Portal.
Si usa el símbolo del sistema de Windows, ejecute el siguiente comando y reinícielo para que se aplique el cambio:
setx Endpoint "<endpoint-of-your-app-configuration-store>"
Si usa PowerShell, ejecute el siguiente comando:
$Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
Si usa macOS o Linux, ejecute el siguiente comando:
export Endpoint='<endpoint-of-your-app-configuration-store>'
Ejecute el siguiente comando para crear la aplicación.
dotnet build
Una vez que la compilación se haya realizado correctamente, ejecute el siguiente comando para ejecutar la aplicación localmente.
dotnet run
Debería ver las siguientes salidas en la consola.
En Azure Portal, vaya al Explorador de configuración del almacén de App Configuration y actualice el valor de las claves siguientes.
Key Value TestApp:Settings:Message Datos de Azure App Configuration, actualizados Espere unos instantes para que pase el período de tiempo del intervalo de actualización. Verá que las salidas de la consola han cambiado.
Limpieza de recursos
Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.
Importante
La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.
- Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
- En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
- En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
- Seleccione Eliminar grupo de recursos.
- Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.
Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.
Pasos siguientes
En este tutorial, ha habilitado el servicio en segundo plano de .NET para actualizar dinámicamente las opciones de configuración desde App Configuration. Para obtener información sobre cómo habilitar la configuración dinámica en una aplicación web de ASP.NET, continúe con el siguiente tutorial:
Para aprender a usar una identidad administrada de Azure para simplificar el acceso a App Configuration, vaya al siguiente tutorial: