缓存过期后 Azure 功能标志不会更新

标签 azure asp.net-core .net-core azure-app-configuration feature-flags

我们有FeatureFlag:IsServiceNeeded,在Azure应用程序配置的功能管理器中没有设置标签。我们通过设置缓存间隔在内置方法 AddAzureAppConfiguration 中使用。

我们正在使用 .net core 3.1 Web api 和 Azure 应用程序配置的功能管理器。

我们在应用程序初始化期间启用了 IsServiceNeeded,几个小时后,我们禁用了 IsServiceNeed。我们等待了一整天,但没有看到差异,因为下面返回 true 而不是 false。由于我们在 program.cs 文件中的配置方式,我们预计它每 3 分钟更新一次。

await _featureManager.IsEnabledAsync("IsServiceNeeded")

如果您发现以下内容有任何奇怪之处,请告诉我。提前致谢,

这是我们正在使用它的代码片段。

Program.cs文件

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                var configurationRoot = config.Build();
                var appConfigConString = configurationRoot["AppConfigConnectionString"];

                config.AddAzureAppConfiguration(options => options.Connect(appConfigConString).UseFeatureFlags(featureFlagOptions => {
                    **featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(3);**
                }));
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Startup.cs文件

public class Startup
{
    public IConfiguration Configuration { get; }
    public string ContentRootPath { get; set; }
    
    public Startup(IWebHostEnvironment env, IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHsts(options =>
        {
            options.Preload = true;
            options.IncludeSubDomains = true;
            options.MaxAge = TimeSpan.FromDays(365);
        });

        var conf = Configuration.GetSection("AppSettings").Get<Config>();

        services.Configure<Config>(Configuration.GetSection("AppSettings"));

        services.AddSingleton<IAppSettings>(c => conf);**

        services.AddScoped<IProcessHandler, ProcessHandler>();
        **services.AddFeatureManagement();**
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseHsts();
        app.UseHttpsRedirection();
        app.UseHttpStatusCodeExceptionMiddleware();

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthentication();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

        private static void LoadMediatorHandlers(IServiceCollection services)
        {
            foreach (var assembly in Assembly
                                     .GetEntryAssembly()
                                     .GetReferencedAssemblies()
                                     .Select(Assembly.Load)
                                     .Where(name => (name.FullName.Contains("Queries") || name.FullName.Contains("Commands"))))
            {
                services.AddMediatR(assembly);
            }
            services.AddMediatR(typeof(Startup));
            services.AddScoped<IMediator, Mediator>();
        }   
    }

功能标志的应用:

public class ProcessHandler : IProcessHandler
{
    private readonly IFeatureManager _featureManager;

    public ProcessHandler(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }

    public async Task<ClassA> ProcessXyz()
    {
        if (`await _featureManager.IsEnabledAsync("IsServiceNeeded")`)
        {
            return new ClassA();
        }
        
        return null;
    }   
}

请注意:出于安全问题,我刚刚添加了所需的代码并替换了实际名称。

提前致谢

最佳答案

缺少的是从 Azure 应用程序配置刷新功能标志(和配置)的中间件。

打开您的startup.cs,在下面添加

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddAzureAppConfiguration();
    services.AddFeatureManagement();
}

然后在下面添加

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...
    app.UseAzureAppConfiguration();
}

关于缓存过期后 Azure 功能标志不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71367669/

相关文章:

azure - 将 C# Teams 消息传递扩展 (Bot) 部署到 Azure 的其他步骤?

azure - Azure 聊天机器人应用程序的自动缩放过程与应用服务自动缩放的过程相同吗?

azure - 部署 Azure 容器而不运行它们

c# - EF Core 多对多自连接

c# - 如何正确模拟代表

azure - DocumentDB 更新触发器中的分区键

c# - ASP.NET Core 中的多种身份验证方案

Linux 上的 Asp.net 核心 - dotnet ef 数据库更新失败并出现版本错误

javascript - 避免加载所有 javascript 文件

angular - 如何将带有 Angular 表单数据的对象列表发布到 .Net Core Web API