gpt4 book ai didi

azure - 缓存过期后,IFeatureManager 缓存是否在第一次调用时未刷新?

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

在 ASP.NET Core 6 最小 API 中,我一直在使用 Azure 应用程序配置功能标志。我已经设置了功能标志配置,以便标志在 5 秒内过期。

builder.Configuration.AddAzureAppConfiguration(
options => options.UseFeatureFlags(opts => opts.CacheExpirationInterval = TimeSpan.FromSeconds(5)));

我还添加了 Azure 应用程序配置和功能管理服务

builder.Services.AddAzureAppConfiguration();
builder.Services.AddFeatureManagement();

并设置用法

app.UseAzureAppConfiguration();

我尝试了其中一个功能标志(如果使用下面的代码启用了该功能标志)

bool isServiceEnabled = await _featureManager.IsEnabledAsync(FeatureFlags.IsServiceEnabled);

起初它确实从应用程序配置中读取了正确的值,然后我尝试切换它并在缓存过期后调用 API,第一次调用 API 仍然显示旧值。只有在过期后第二次调用 API 时才会显示新值。

似乎第一个 API 调用仍然缓存了旧值。

我是不是错过了什么?我在设置功能标志时做错了什么吗?

最佳答案

这是设计使然。

以下代码将 AzureAppConfigurationRefreshMiddleware 添加到请求管道。

    app.UseAzureAppConfiguration();

参见https://github.com/Azure/AppConfiguration-DotnetProvider/blob/main/src/Microsoft.Azure.AppConfiguration.AspNetCore/AzureAppConfigurationRefreshExtensions.cs

该中间件执行基于事件的刷新并具有以下代码。

    public async Task InvokeAsync(HttpContext context)
{
foreach (var refresher in Refreshers)
{
_ = refresher.TryRefreshAsync();
}

// Call the next delegate/middleware in the pipeline
await _next(context).ConfigureAwait(false);
}

请注意,refresher.TryRefreshAsync(); 没有 await。因此,在刷新成功之前,您仍然会获取脏数据。

参见https://github.com/Azure/AppConfiguration-DotnetProvider/blob/main/src/Microsoft.Azure.AppConfiguration.AspNetCore/AzureAppConfigurationRefreshMiddleware.cs

关于azure - 缓存过期后,IFeatureManager 缓存是否在第一次调用时未刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74303855/

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