gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:55:33 25 4
gpt4 key购买 nike

我们有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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com