Dela via


Självstudie: Använda dynamisk konfiguration i en Gin-webbapp

Den här självstudien visar hur du kan implementera dynamiska konfigurationsuppdateringar i ett Gin-webbprogram med hjälp av Azure App Configuration. Den bygger på webbappen som introducerades i föregående snabbstart.

Förutsättningar

Slutför snabbstarten: Skapa en Gin-webbapp med Azure App Configuration

Läsa in data på nytt från App Configuration

  1. Öppna appconfig.go-filen. I funktionen loadAzureAppConfiguration uppdaterar du options för att aktivera uppdatering. Go-providern läser in hela konfigurationen igen när den identifierar en ändring i något av de valda nyckelvärdena. Mer information om hur du övervakar konfigurationsändringar finns i Metodtips för konfigurationsuppdatering.

    options := &azureappconfiguration.Options{
        Selectors: []azureappconfiguration.Selector{
            {
                KeyFilter: "Config.*",
            },
        },
        TrimKeyPrefixes: []string{"Config."},
        RefreshOptions: azureappconfiguration.KeyValueRefreshOptions{
            Enabled:  true,
        },
    }
    

    Tips/Råd

    Du kan ange Interval egenskapen för RefreshOptions för att ange den minsta tiden mellan konfigurationsuppdateringarna. I det här exemplet använder du standardvärdet 30 sekunder. Justera till ett högre värde om du behöver minska antalet begäranden som görs till appkonfigurationsarkivet.

  2. main.go Uppdatera filen för att registrera en återanropsfunktion för konfigurationsuppdateringar:

    // 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
        }
    })
    
    // The rest of existing code
    //... ...
    
  3. Lägg till ett mellanprogram för konfigurationsuppdatering. Uppdatera main.go med följande kod.

    // Existing code
    // ... ...
    type App struct {
        Name      string
        Port      int
    }
    
    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()
        }
    }
    
    // The rest of existing code
    //... ...
    
  4. Använd mellanprogrammet för konfigurationsuppdatering:

    // Existing code
    // ... ...
    router := gin.Default()
    
    // Use the configuration refresh middleware
    router.Use(configRefreshMiddleware(provider))
    
    // The rest of existing code
    //... ...
    

Uppdatering av begärd konfiguration

Konfigurationsuppdateringen utlöses av inkommande begäranden till webbappen. Ingen uppdatering sker om appen är inaktiv. När appen är aktiv övervakar konfigurationsuppdateringen mellanprogrammet de valda nyckelvärden som du konfigurerade i azureappconfiguration.Options. Mellanprogrammet utlöses vid varje inkommande begäran till din app. Mellanprogrammet skickar dock bara begäranden om att kontrollera värdet i App Configuration när uppdateringsintervallet som du anger har passerat.

  • Om en begäran till App Configuration för ändringsidentifiering misslyckas fortsätter appen att använda den cachelagrade konfigurationen. Nya försök att söka efter ändringar görs regelbundet medan det finns nya inkommande begäranden till din app.
  • Konfigurationsuppdateringen sker asynkront vid bearbetningen av appens inkommande begäranden. Den blockerar eller saktar inte ned den inkommande begäran som utlöste uppdateringen. Begäran som utlöste uppdateringen kanske inte hämtar de uppdaterade konfigurationsvärdena, men senare begäranden får nya konfigurationsvärden.
  • För att säkerställa att mellanprogrammet utlöses använder du mellanprogrammet för konfigurationsuppdatering så tidigt som det är lämpligt i pipelinen för begäran så att inget annat mellanprogram hoppar över det i din app.

Köra webbprogrammet

Nu när du har konfigurerat dynamisk konfigurationsuppdatering ska vi testa den för att se den i praktiken.

  1. Kör programmet.

     go mod tidy
     go run .
    
  2. Öppna en webbläsare och gå till http://localhost:8080 för att komma åt ditt program. Webbsidan ser ut så här:

    Skärmbild av ginwebbappen före uppdateringen.

  3. Gå till appkonfigurationsarkivet och uppdatera värdet för Config.Message nyckeln.

    Nyckel Värde Innehållstyp
    Config.Message Hej från Azure App Configuration – nu med liveuppdateringar! Lämna tom
  4. När du har uppdaterat webbläsaren några gånger visas det uppdaterade innehållet när ConfigMap har uppdaterats om 30 sekunder.

    Skärmbild av ginwebbappen efter uppdateringen.

Rensa resurser

Om du inte vill fortsätta använda resurserna som skapas i den här artikeln tar du bort resursgruppen som du skapade här för att undvika avgifter.

Viktigt!

Att ta bort en resursgrupp kan inte ångras. Resursgruppen och alla resurser i den tas bort permanent. Se till att du inte oavsiktligt tar bort fel resursgrupp eller resurser. Om du har skapat resurserna för den här artikeln i en resursgrupp som innehåller andra resurser som du vill behålla tar du bort varje resurs individuellt från respektive fönster i stället för att ta bort resursgruppen.

  1. Logga in på Azure Portal och välj Resursgrupper.
  2. I rutan Filtrera efter namn anger du namnet på resursgruppen.
  3. I resultatlistan väljer du resursgruppens namn för att se en översikt.
  4. Välj Ta bort resursgrupp.
  5. Du blir ombedd att bekräfta borttagningen av resursgruppen. Ange namnet på resursgruppen för att bekräfta och välj Ta bort.

Efter en liten stund tas resursgruppen och alla dess resurser bort.