1

我目前一直在研究它提供的IConfigurationRefresher功能、方法SetDirty()和方法。RefreshAsync()

这是我正在使用的主要代码,当调用某个 API 端点时,它当前正在刷新 FeatureManagement 包的缓存:

Log.Logger.Information($"Refreshing app config.");
_refresher.SetDirty(TimeSpan.FromSeconds(0));
await _refresher.RefreshAsync();

这在使用服务/应用程序的单个托管实例时非常有用,但是当通过 Web 场中的负载均衡器或在具有多个 pod 的 Kubernetes 集群中存在多个应用程序可用时,此功能将如何工作?

我的另一个问题是,缓存是本地保存在消费服务的内存中,还是分布并缓存在应用程序配置本身中?

设想:

如果发生对 Application1 的请求,则刷新内部缓存。如果通过 SDK 从 Azure 应用配置中检索到任何配置/功能标志,会发生什么情况?由于缓存刷新,某些调用是否具有更新的值,而对第二个应用程序的调用包含过期值?

4

1 回答 1

2

首先,我将讨论负载均衡器背后的多个应用程序的问题。这必须通过使用允许将事件发布到所有后端应用程序的事件模型来解决。这可以通过服务总线完成,请查看 Azure App Configuration 为其配置刷新推送模型提供的文档。

其次,缓存的关注。您通过调用使此处无效的“缓存”SetDirty仅在内存中。

我相信仅内存缓存问题的答案也解决了最后一个问题。每个应用程序都将具有与它们最后一次调用SetDirty和执行刷新相对应的值。每次执行该操作序列时,调用者将从应用程序配置中获取最新值。

如果有任何不清楚的地方,请告诉我。

于 2021-02-25T17:23:53.803 回答