Freigeben über


Lernprogramm: Verwenden der dynamischen Konfiguration in einer Gin Web App

In diesem Lernprogramm wird gezeigt, wie Sie dynamische Konfigurationsupdates in einer Gin-Webanwendung mithilfe der Azure App-Konfiguration implementieren können. Sie baut auf der Web-App auf, die in der vorherigen Schnellstartanleitung eingeführt wurde.

Voraussetzungen

Beenden Sie den Schnellstart Erstellen einer Gin-Web-App mit Azure App Configuration.

Erneutes Laden von Daten aus App Configuration

  1. Öffnen Sie die Datei appconfig.go. Aktualisieren Sie innerhalb der loadAzureAppConfiguration-Funktion „options“, um die Aktualisierung zu aktivieren. Der Go-Anbieter lädt die gesamte Konfiguration neu, wenn eine Änderung in einem der ausgewählten Schlüsselwerte erkannt wird. Weitere Informationen zum Überwachen von Konfigurationsänderungen finden Sie unter Bewährte Methoden für die Aktualisierung der Konfiguration.

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

    Tipp

    Sie können die Interval-Eigenschaft des RefreshOptions festlegen, um die Mindestzeit zwischen Konfigurationsaktualisierungen anzugeben. In diesem Beispiel verwenden Sie den Standardwert von 30 Sekunden. Stellen Sie einen höheren Wert ein, wenn Sie die Anzahl der Anfragen an Ihren App Configuration Store verringern müssen.

  2. Aktualisieren Sie Ihre main.go Datei, um eine Rückruffunktion für Konfigurationsupdates zu registrieren:

    // 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. Fügen Sie eine Middleware für die Konfigurationsaktualisierung hinzu. Aktualisieren Sie main.go mit folgendem Code.

    // 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. Verwenden Sie die Middleware für die Konfigurationsaktualisierung:

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

Anforderungsgesteuerte Konfigurationsaktualisierung

Die Konfigurationsaktualisierung wird durch die eingehenden Anforderungen an Ihre Web-App ausgelöst. Es erfolgt keine Aktualisierung, wenn sich Ihre App im Leerlauf befindet. Wenn Ihre App aktiv ist, überwacht die Aktualisierungs-Middleware für die Konfiguration die ausgewählten Schlüsselwerte, die Sie in azureappconfiguration.Options konfiguriert haben. Die Middleware wird bei jeder eingehenden Anforderung Ihrer App ausgelöst. Die Middleware sendet jedoch nur Anforderungen, um den Wert in App Configuration zu überprüfen, wenn das von Ihnen festgelegte Aktualisierungsintervall verstrichen ist.

  • Tritt bei einer an App Configuration gesendeten Änderungserkennungsanforderung ein Fehler auf, wird von Ihrer App weiterhin die zwischengespeicherte Konfiguration verwendet. In regelmäßigen Abständen werden neue Versuche unternommen, nach Änderungen zu suchen, während neue Anfragen bei Ihrer App eingehen.
  • Die Konfigurationsaktualisierung wird asynchron zur Verarbeitung der eingehenden Anforderungen Ihrer App durchgeführt. Die eingehende Anforderung, durch die die Aktualisierung ausgelöst wurde, wird nicht blockiert oder verlangsamt. Die Anforderung, durch die die Aktualisierung ausgelöst wurde, erhält möglicherweise nicht die aktualisierten Konfigurationswerte, nachfolgende Anforderungen dagegen schon.
  • Um sicherzustellen, dass die Middleware ausgelöst wird, verwenden Sie die Middleware für die Konfigurationsaktualisierung möglichst früh in Ihrer Anforderungspipeline, damit keine andere Middleware sie in Ihrer App überspringt.

Ausführen der Webanwendung

Nachdem Sie die dynamische Konfigurationsaktualisierung eingerichtet haben, testen wir sie, um sie in Aktion zu sehen.

  1. Führen Sie die Anwendung aus.

     go mod tidy
     go run .
    
  2. Öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost:8080, um auf Ihre Anwendung zuzugreifen. Die Webseite sieht folgendermaßen aus:

    Screenshot des Zustands der Gin-Web-App vor der Aktualisierung.

  3. Navigieren Sie zu Ihrem App-Konfigurationsspeicher, und aktualisieren Sie den Wert des Config.Message Schlüssels.

    Schlüssel Wert Inhaltstyp
    Config.Message Hallo aus Der Azure App-Konfiguration – jetzt mit Liveupdates! Leer lassen
  4. Nachdem Sie den Browser ein paar Mal aktualisiert haben, wird der aktualisierte Inhalt angezeigt, sobald die ConfigMap in 30 Sekunden aktualisiert wurde.

    Screenshot von der Web-App Gin nach dem Aktualisieren.

Bereinigen von Ressourcen

Wenn Sie die in diesem Artikel erstellten Ressourcen nicht mehr verwenden möchten, löschen Sie die erstellte Ressourcengruppe, um Kosten zu vermeiden.

Von Bedeutung

Das Löschen einer Ressourcengruppe kann nicht rückgängig gemacht werden. Die Ressourcengruppe und alle darin enthaltenen Ressourcen werden unwiderruflich gelöscht. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Falls Sie die Ressourcen für diesen Artikel in einer Ressourcengruppe erstellt haben, die andere beizubehaltende Ressourcen enthält, löschen Sie die Ressourcen einzeln über den entsprechenden Bereich, statt die Ressourcengruppe zu löschen.

  1. Melden Sie sich beim Azure-Portal an, und klicken Sie auf Ressourcengruppen.
  2. Geben Sie im Feld Nach Name filtern den Namen Ihrer Ressourcengruppe ein.
  3. Wählen Sie in der Ergebnisliste den Ressourcengruppennamen aus, um eine Übersicht anzuzeigen.
  4. Wählen Sie die Option Ressourcengruppe löschen.
  5. Sie werden aufgefordert, das Löschen der Ressourcengruppe zu bestätigen. Geben Sie zur Bestätigung den Namen Ihrer Ressourcengruppe ein, und klicken Sie auf Löschen.

Daraufhin werden die Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht.