你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本教程介绍如何使用 Azure 应用配置在 Gin Web 应用程序中实现动态配置更新。 它基于上一快速入门中引入的 Web 应用。
先决条件
完成快速入门: 使用 Azure 应用配置创建 Gin Web 应用
从应用配置重载数据
打开
appconfig.go
文件。 在loadAzureAppConfiguration
函数内部,更新options
以启用刷新。 每当 Go 提供程序检测到任何所选键值更改时,Go 提供程序都会重新加载整个配置。 有关监视配置更改的详细信息,请参阅 配置刷新的最佳做法。options := &azureappconfiguration.Options{ Selectors: []azureappconfiguration.Selector{ { KeyFilter: "Config.*", }, }, TrimKeyPrefixes: []string{"Config."}, RefreshOptions: azureappconfiguration.KeyValueRefreshOptions{ Enabled: true, }, }
小窍门
可以设置
Interval
属性RefreshOptions
以指定配置刷新之间的最短时间。 在此示例中,使用默认值 30 秒。 如果需要减少对应用配置存储的请求数量,请调整为更高的值。更新您的
main.go
文件以注册用于配置更新的回调函数:// Existing code // ... ... var config Config if err := provider.Unmarshal(&config, nil); err != nil { log.Fatalf("Failed to unmarshal configuration: %v", err) } // Register refresh callback provider.OnRefreshSuccess(func() { // Re-unmarshal the configuration err := provider.Unmarshal(&config, nil) if err != nil { log.Printf("Failed to unmarshal updated configuration: %s", err) return } })
添加配置刷新中间件。 使用以下代码更新
main.go
。func configRefreshMiddleware(provider *azureappconfiguration.AzureAppConfiguration) gin.HandlerFunc { return func(c *gin.Context) { // Start refresh in a goroutine to avoid blocking the request go func() { ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := provider.Refresh(ctx); err != nil { log.Printf("Error refreshing configuration: %s", err) } }() c.Next() } }
使用配置刷新中间件:
// Existing code // ... ... router := gin.Default() // Use the configuration refresh middleware router.Use(configRefreshMiddleware(provider)) // The rest of existing code //... ...
请求驱动的配置刷新
配置刷新由对 Web 应用的传入请求触发。 如果应用处于空闲状态,则不会发生刷新。 当应用处于活动状态时,配置刷新中间件会监视你在其中 azureappconfiguration.Options
配置的所选键值。 每次向应用传入请求时,都会触发中间件。 但是,仅当设置的刷新间隔通过时,中间件才会发送请求以检查应用配置中的值。
- 如果向应用程序配置的更改检测请求失败,则应用将继续使用缓存的配置。 只要您的应用有新的传入请求,将会定期尝试检查是否有更改。
- 配置刷新与应用传入请求的处理异步进行。 它不会阻止或减缓触发刷新的传入请求。 触发刷新的请求可能不会得到更新的配置值,但是后面的请求会得到新的配置值。
- 为确保触发中间件,请尽早在请求管道中使用配置刷新中间件,这样其他中间件就不会在应用中跳过它。
运行 Web 应用程序
设置动态配置刷新后,让我们对其进行测试以查看效果。
运行该应用程序。
go run main.go
打开 Web 浏览器并导航到
http://localhost:8080
访问应用程序。 Web 页面如下所示:导航到您的应用配置存储并更新
Config.Message
密钥的值。密钥 价值 内容类型 Config.Message Azure 应用配置中的问候语 - 现可实时更新! 留空 刷新浏览器几次后,ConfigMap 会在 30 秒内更新,然后你会看到更新的内容。
清理资源
如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。
重要
删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。
- 登录到 Azure 门户,然后选择“资源组”。
- 在按名称筛选框中,输入资源组的名称。
- 在结果列表中,选择资源组名称以查看概述。
- 选择“删除资源组”。
- 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除”。
片刻之后,将会删除该资源组及其所有资源。