教程:在 Aspire 解决方案中使用动态配置

本教程介绍如何在 Aspire 解决方案中启用动态配置更新。 它基于快速入门中引入的 Web 应用构建。 应用将利用应用程序配置提供程序库来实现其内置的配置缓存和刷新功能。 在继续之前,请先使用 Azure 应用配置完成创建 Aspire 解决方案

本教程中,您将学习如何:

  • 配置您的应用,使其能够更新配置以响应应用配置存储中的更改。
  • 在应用中注入最新配置。

先决条件

完成快速入门: 使用 Azure 应用配置创建 Aspire 解决方案

从应用配置重载数据

  1. 导航到 Web 项目的目录(在 先决条件 步骤中创建)。 运行以下命令以添加 Microsoft.Azure.AppConfiguration.AspNetCore Nuget 包。

    dotnet add package Microsoft.Azure.AppConfiguration.AspNetCore
    
  2. 打开 AppHost.cs,并更新 AddAzureAppConfiguration 在快速入门期间添加的方法。

    builder.AddAzureAppConfiguration(
        "appconfiguration",
        configureOptions: options =>
        {
            // Load all keys that start with `TestApp:` and have no label.
            options.Select("TestApp:*", LabelFilter.Null);
            // Reload configuration if any selected key-values have changed.
            options.ConfigureRefresh(refreshOptions =>
                refreshOptions.RegisterAll());
        });
    

    该方法 Select 用于加载其密钥名称以 TestApp 开头且 没有标签的所有键值。 可以多次调用 Select 方法来加载具有不同前缀或标签的配置。 如果与多个应用共享一个应用配置存储区,此方法可帮助仅加载与当前应用相关的配置,而不是从应用商店加载所有内容。

    ConfigureRefresh 方法中,调用 RegisterAll 该方法以指示应用配置提供程序在检测到任何所选键值(以 TestApp 开头且没有标签)发生更改时重新加载整个配置。 有关监视配置更改的详细信息,请参阅 配置刷新的最佳做法

  3. 将 Azure 应用程序配置中间件添加到应用的服务集合。

    使用以下代码 更新Program.cs

    // Existing code in Program.cs
    // ... ...
    
    // Add Azure App Configuration middleware to the container of services.
    builder.Services.AddAzureAppConfiguration();
    
    var app = builder.Build();
    
    // The rest of existing code in program.cs
    // ... ...
    
  4. 调用 UseAzureAppConfiguration 方法。 它使应用能够使用应用程序配置中间件为你自动更新配置。

    使用以下代码 更新Program.cs

    // Existing code in Program.cs
    // ... ...
    
    var app = builder.Build();
    
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    
    // Use Azure App Configuration middleware for dynamic configuration refresh.
    app.UseAzureAppConfiguration();
    
    // The rest of existing code in program.cs
    // ... ...
    

请求驱动的配置刷新

配置刷新由对 Web 应用的传入请求触发。 如果应用处于空闲状态,则不会发生刷新。 当您的应用处于活动状态时,应用配置中间件会监视您在ConfigureRefresh调用中注册用于刷新的任何密钥。 每当有请求传入您的应用程序时,中间件都会被触发。 但是,仅当设置的刷新间隔通过时,中间件才会发送请求以检查应用配置中的值。

  • 如果对应用配置进行更改检测的请求失败,应用将继续使用缓存的配置。 只要您的应用有新的传入请求,将会定期尝试检查是否有更改。
  • 配置刷新与应用传入请求的处理异步进行。 它不会阻止或减缓触发刷新的传入请求。 触发刷新的请求可能不会得到更新的配置值,但是后面的请求会得到新的配置值。
  • 为确保触发中间件,请尽早在请求管道中调用 app.UseAzureAppConfiguration() 方法,这样其他中间件就不会在应用中跳过它。

在本地运行应用

  1. 运行 AppHost 项目。 转到 Aspire 仪表板并打开 Web 应用。

    包含来自 Azure 应用配置的原始消息的 Web 应用的屏幕截图。

  2. 在 Azure 门户中,导航到应用程序配置存储区的“配置资源管理器”,并更新以下键的值

    Key 价值
    TestApp:Settings:Message Azure 应用配置的问候 - 已更新!
  3. 多次刷新浏览器。 当刷新间隔在 30 秒后过时,页面会显示更新的内容。

    包含 Azure 应用配置中更新消息的 Web 应用的屏幕截图。

  4. 转到 Aspire 仪表板并打开结构化日志。 可以看到资源 webfrontend 有一个日志,其中包含消息“已重新加载配置”。

    显示结构化日志的 Aspire 仪表板的屏幕截图。

在本地运行应用

  1. 运行 AppHost 项目。 转到 Aspire 仪表板并打开 Web 应用。

    包含来自 Azure 应用配置的原始消息的 Web 应用的屏幕截图。

  2. 转到模拟器 UI,编辑以下键的值。

    Key 价值
    TestApp:Settings:Message Azure 应用配置的问候 - 已更新!
  3. 多次刷新浏览器。 当刷新间隔在 30 秒后过时,页面会显示更新的内容。

    包含 Azure 应用配置中更新消息的 Web 应用的屏幕截图。

  4. 转到 Aspire 仪表板并打开结构化日志。 可以看到资源 webfrontend 有一个日志,其中包含消息“已重新加载配置”。

    显示结构化日志的 Aspire 仪表板的屏幕截图。

后续步骤

在本教程中,你使 Aspire 应用能够从应用配置动态刷新配置设置。 若要了解如何在 ASP.NET Web 应用程序中实现动态配置,请继续学习下一篇教程: