你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:向 Go 控制台应用添加功能标志

在本快速入门中,你将在 Azure 应用配置中创建一个功能标志,并使用它来动态控制 Go 控制台应用中功能的可用性。

功能管理支持扩展了应用程序配置中的动态配置功能。 此示例演示如何将功能标志集成到具有实时监视功能的 Go 控制台应用程序中。

先决条件

创建功能标志

将名为Beta的功能标志添加到应用配置存储中,并将LabelDescription保留为默认值。 有关如何使用 Azure 门户或 CLI 将功能标志添加到商店的信息,请转到 创建功能标志

创建功能标志的屏幕截图。

使用功能标志

  1. 为 Go 项目创建新目录并导航到它:

    mkdir go-feature-flag-quickstart
    cd go-feature-flag-quickstart
    
  2. 初始化新的 Go 模块:

    go mod init go-feature-flag-quickstart
    
  3. 安装 Azure 应用配置和功能管理所需的 Go 包:

    go get github.com/microsoft/Featuremanagement-Go/featuremanagement
    go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig
    
  4. options更新以在上一步中启用功能标志。

    	options := &azureappconfiguration.Options{
    		FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{
    			Enabled: true,
    			RefreshOptions: azureappconfiguration.RefreshOptions{
    				Enabled: true,
    			},
    		},
    	}
    

    小窍门

    当在 FeatureFlagOptions 中未指定选择器时,它会加载应用配置存储库中所有无标签的功能开关。 功能标志的默认刷新间隔为 30 秒。 可以通过 RefreshOptions 参数自定义此行为。 例如,以下代码片段仅加载键名以“TestApp:”开头的,并具有标签“dev”的功能标志。 该代码还将刷新间隔时间更改为 5 分钟。 请注意,此刷新间隔时间与常规键值的刷新间隔时间不同。

    FeatureFlagOptions{
        Enabled: true,
        Selectors: []azureappconfiguration.Selector{
            {
                KeyFilter:   "TestApp:*",
                LabelFilter: "dev",
            },
        },
        RefreshOptions: azureappconfiguration.RefreshOptions{
            Enabled: true,
            Interval: 5 * time.Minute,
        },
    }
    
  5. 创建主应用程序文件 main.go

    package main
    
    import (
    	"context"
    	"fmt"
    	"log"
    	"os"
    	"time"
    
    	"github.com/microsoft/Featuremanagement-Go/featuremanagement"
    	"github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig"
    )
    
    func main() {
        ctx := context.Background()
    
        // Load Azure App Configuration
        appConfig, err := loadAzureAppConfiguration(ctx)
        if err != nil {
            log.Fatalf("Error loading Azure App Configuration: %v", err)
        }
    
        // Create feature flag provider
        featureFlagProvider, err := azappconfig.NewFeatureFlagProvider(appConfig)
        if err != nil {
            log.Fatalf("Error creating feature flag provider: %v", err)
        }
    
        // Create feature manager
        featureManager, err := featuremanagement.NewFeatureManager(featureFlagProvider, nil)
        if err != nil {
            log.Fatalf("Error creating feature manager: %v", err)
        }
    
        // Monitor the Beta feature flag
        fmt.Println("Monitoring 'Beta' feature flag (press Ctrl+C to exit):")
        fmt.Println("Toggle the Beta feature flag in Azure portal to see real-time updates...")
        fmt.Println()
    
        ticker := time.NewTicker(5 * time.Second)
        defer ticker.Stop()
    
        for {
            select {
            case <-ticker.C:
                // Refresh configuration to get latest feature flag settings
                if err := appConfig.Refresh(ctx); err != nil {
                    log.Printf("Error refreshing configuration: %v", err)
                    continue
                }
    
                // Evaluate the Beta feature flag
                isEnabled, err := featureManager.IsEnabled("Beta")
                if err != nil {
                    log.Printf("Error checking if Beta feature is enabled: %v", err)
                    continue
                }
    
                // Print timestamp and feature status
                timestamp := time.Now().Format("15:04:05")
                fmt.Printf("[%s] Beta is enabled: %t\n", timestamp, isEnabled)
    
            case <-ctx.Done():
                fmt.Println("\nShutting down...")
                return
            }
        }
    }
    

运行应用程序

  1. 运行应用程序:

    go mod tidy
    go run .
    

  2. 应用程序开始监视 Beta 功能标志,并每隔 5 秒显示其当前状态:

    Monitoring 'Beta' feature flag (press Ctrl+C to exit):
    Toggle the Beta feature flag in Azure portal to see real-time updates...
    
    [14:30:15] Beta is enabled: false
    [14:30:20] Beta is enabled: false
    [14:30:25] Beta is enabled: false
    
  3. 登录到 Azure 门户。 选择“所有资源”,然后选择先前创建的应用程序配置存储

  4. 选择“功能管理器”并找到“Beta”功能标志。 通过选中“已启用”下的复选框来启用该标志

  5. 返回到控制台应用程序。 几秒钟后,应会看到功能标志状态更改:

    [14:30:30] Beta is enabled: false
    [14:30:35] Beta is enabled: true
    [14:30:40] Beta is enabled: true
    
  6. 可以在 Azure 门户中打开和关闭功能标志,以便在控制台应用程序中查看实时更新,而无需重启。

  7. Ctrl+C 停止应用程序。

清理资源

如果不想继续使用本文中创建的资源,请删除此处创建的资源组以避免产生费用。

重要

删除资源组的操作不可逆。 将永久删除资源组以及其中的所有资源。 请确保不要意外删除错误的资源组或资源。 如果在包含要保留的其他资源的资源组中创建了本文的资源,请从相应的窗格中单独删除每个资源,而不是删除该资源组。

  1. 登录到 Azure 门户,然后选择“资源组”。
  2. 按名称筛选框中,输入资源组的名称。
  3. 在结果列表中,选择资源组名称以查看概述。
  4. 选择“删除资源组”。
  5. 系统会要求确认是否删除资源组。 重新键入资源组的名称进行确认,然后选择“删除”。

片刻之后,将会删除该资源组及其所有资源。

后续步骤

在本快速入门中,你在 Azure 应用配置中创建了一个功能标志,并在 Go 控制台应用程序中使用它。 功能管理 Go 库提供与 Azure 应用配置无缝集成的丰富功能标志功能。 有关更多功能,请继续阅读以下文档。

虽然使用功能标志可以在应用中激活或停用功能,但你可能希望根据应用的逻辑自定义功能标志。 使用功能筛选器可以按条件启用功能标志。 有关详细信息,请继续阅读以下教程。

Azure 应用程序配置提供了内置的功能筛选器,使你可以仅在特定的时段或者仅对应用的特定目标受众激活功能标志。 有关详细信息,请继续阅读以下教程。