Compartir vía


Inicio rápido: Adición de marcas de características a una aplicación de consola de Go

En este inicio rápido, creará una marca de características en Azure App Configuration y la usará para controlar dinámicamente la disponibilidad de las características en una aplicación de consola de Go.

La compatibilidad con la administración de características amplía la característica de configuración dinámica en App Configuration. En este ejemplo se muestra cómo integrar marcas de características en una aplicación de consola de Go con funcionalidades de supervisión en tiempo real.

Prerrequisitos

Creación de una marca de características

Agregue una marca de característica denominada Beta al almacén de App Configuration y deje Etiqueta y descripción con sus valores predeterminados. Para más información sobre cómo agregar marcas de características a un almacén mediante Azure Portal o la CLI, vaya a Creación de una marca de característica.

Recorte de pantalla de la creación de una marca de característica.

Uso de una marca de características

  1. Cree un directorio para el proyecto de Go y vaya a él:

    mkdir go-feature-flag-quickstart
    cd go-feature-flag-quickstart
    
  2. Inicialice un nuevo módulo de Go:

    go mod init go-feature-flag-quickstart
    
  3. Instale los paquetes de Go necesarios para Azure App Configuration y la administración de características:

    go get github.com/microsoft/Featuremanagement-Go/featuremanagement
    go get github.com/microsoft/Featuremanagement-Go/featuremanagement/providers/azappconfig
    
  4. Cree un archivo denominado appconfig.go con el siguiente contenido. Puede conectarse a su App Configuration store utilizando Microsoft Entra ID (recomendado) o una cadena de conexión.

    package main
    
    import (
        "context"
        "log"
        "os"
    
        "github.com/Azure/AppConfiguration-GoProvider/azureappconfiguration"
        "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    )
    
    func loadAzureAppConfiguration(ctx context.Context) (*azureappconfiguration.AzureAppConfiguration, error) {
        // Get the endpoint from environment variable
        endpoint := os.Getenv("AZURE_APPCONFIG_ENDPOINT")
        if endpoint == "" {
            log.Fatal("AZURE_APPCONFIG_ENDPOINT environment variable is not set")
        }
    
        // Create a credential using DefaultAzureCredential
        credential, err := azidentity.NewDefaultAzureCredential(nil)
        if err != nil {
            log.Fatalf("Failed to create credential: %v", err)
        }
    
        // Set up authentication options with endpoint and credential
        authOptions := azureappconfiguration.AuthenticationOptions{
            Endpoint:   endpoint,
            Credential: credential,
        }
    
        // Configure feature flag options
        options := &azureappconfiguration.Options{
            FeatureFlagOptions: azureappconfiguration.FeatureFlagOptions{
                Enabled: true,
                RefreshOptions: azureappconfiguration.RefreshOptions{
                    Enabled: true,
                },
            },
        }
    
        // Load configuration from Azure App Configuration
        appConfig, err := azureappconfiguration.Load(ctx, authOptions, options)
        if err != nil {
            log.Fatalf("Failed to load configuration: %v", err)
        }
    
        return appConfig, nil
    }
    

    Sugerencia

    Cuando no se especifica ningún selector en FeatureFlagOptions, carga todas las marcas de características sin etiqueta en el almacén de App Configuration. El intervalo de actualización predeterminado de las marcas de características es de 30 segundos. Puede personalizar este comportamiento a través del parámetro RefreshOptions. Por ejemplo, el siguiente fragmento de código carga solo las marcas de características que comienzan con TestApp: en su nombre de clave y tienen la etiqueta dev. El código también cambia el intervalo de actualización a 5 minutos. Tenga en cuenta que el intervalo de tiempo de actualización es independiente del de los valores de clave normales.

    azureappconfiguration.FeatureFlagOptions{
        Enabled: true,
        Selectors: []azureappconfiguration.Selector{
            {
                KeyFilter:   "TestApp:*",
                LabelFilter: "dev",
            },
        },
        RefreshOptions: azureappconfiguration.RefreshOptions{
            Enabled: true,
            Interval: 5 * time.Minute,
        },
    }
    
  5. Cree el archivo main.gode aplicación principal :

    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
            }
        }
    }
    

Ejecutar la aplicación

  1. Ejecute la aplicación:

    go mod tidy
    go run .
    

  2. La aplicación comienza a supervisar la marca de característica Beta y muestra su estado actual cada 5 segundos:

    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. Inicie sesión en Azure Portal. Seleccione Todos los recursos y seleccione el almacén de App Configuration que creó anteriormente.

  4. Seleccione Administrador de características y busque la marca de características Beta . Habilite la marca activando la casilla en Habilitado.

  5. Vuelva a la aplicación de consola. Después de unos segundos, debería ver el cambio de estado de la marca de característica:

    [14:30:30] Beta is enabled: false
    [14:30:35] Beta is enabled: true
    [14:30:40] Beta is enabled: true
    
  6. Puede activar y desactivar la marca de características en Azure Portal para ver las actualizaciones en tiempo real en la aplicación de consola sin reiniciarla.

  7. Presione Ctrl+C para detener la aplicación.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este inicio rápido, ha creado una marca de características en Azure App Configuration y la ha usado en una aplicación de consola de Go. La biblioteca Go de administración de funciones ofrece capacidades enriquecidas de banderas de funciones que se integran perfectamente con Azure App Configuration. Para obtener más características, continúe con el siguiente documento.

Aunque una marca de característica permite activar o desactivar la funcionalidad en la aplicación, es posible que quieras personalizar una marca de característica en función de la lógica de la aplicación. Los filtros de características permiten habilitar una marca de característica condicionalmente. Para obtener más información, continúe con el siguiente tutorial.

Azure App Configuration ofrece filtros de características integrados que permiten activar una marca de característica solo durante un período específico o para un público específico de la aplicación. Para obtener más información, continúe con el siguiente tutorial.