Condividi tramite


Esercitazione: Utilizzare la configurazione dinamica in un'applicazione web Gin

Questa esercitazione illustra come implementare gli aggiornamenti della configurazione dinamica in un'applicazione Web Gin usando Configurazione app di Azure. Si basa sull'app Web introdotta nella guida rapida precedente.

Prerequisiti

Completare l'introduzione rapida: Creare un'app Web Gin con Configurazione app di Azure

Ricarica i dati dalla configurazione dell'applicazione

  1. Aprire il file appconfig.go. All'interno della funzione loadAzureAppConfiguration, aggiornare options per abilitare l'aggiornamento. Il provider Go ricarica l'intera configurazione ogni volta che rileva una modifica in uno dei valori chiave selezionati. Per altre informazioni sul monitoraggio delle modifiche alla configurazione, vedere Procedure consigliate per l'aggiornamento della configurazione.

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

    Suggerimento

    È possibile impostare la proprietà Interval di RefreshOptions per specificare il tempo minimo tra gli aggiornamenti della configurazione. In questo esempio si usa il valore predefinito di 30 secondi. Impostare un valore superiore se è necessario ridurre il numero di richieste effettuate nell'archivio di Configurazione app.

  2. Aggiornare il main.go file per registrare una funzione di callback per gli aggiornamenti della configurazione:

    // 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
        }
    })
    
  3. Aggiungere un middleware di aggiornamento della configurazione. Aggiornare main.go con il codice seguente.

    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()
        }
    }
    
  4. Usare il middleware di aggiornamento della configurazione:

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

Aggiornamento della configurazione basata su richiesta

L'aggiornamento della configurazione viene attivato dalle richieste in ingresso all'app Web. Se l'app non è inattiva, non verrà eseguito alcun aggiornamento. Quando l'app è attiva, il middleware di aggiornamento della configurazione monitora i valori chiave selezionati configurati in azureappconfiguration.Options. Il middleware viene attivato su ogni richiesta in ingresso all'app. Tuttavia, il middleware invierà richieste solo per controllare il valore in Configurazione app quando l'intervallo di aggiornamento impostato è passato.

  • Se una richiesta di Configurazione app per il rilevamento delle modifiche non riesce, l'app continuerà a usare la configurazione memorizzata nella cache. I nuovi tentativi di verificare la presenza di modifiche verranno eseguiti periodicamente mentre sono presenti nuove richieste in ingresso per l'app.
  • L'aggiornamento della configurazione viene eseguito in modo asincrono per l'elaborazione delle richieste in ingresso dell'app. Non blocca o rallenta la richiesta in ingresso che ha attivato l'aggiornamento. La richiesta che ha attivato l'aggiornamento potrebbe non ottenere i valori di configurazione aggiornati, ma le richieste successive otterranno nuovi valori di configurazione.
  • Per garantire che il middleware venga attivato, utilizzare il middleware di aggiornamento della configurazione il prima possibile nella pipeline di richieste, in modo che nessun altro middleware lo ignori nell'applicazione.

Eseguire l'applicazione Web

Dopo aver configurato l'aggiornamento della configurazione dinamica, è possibile testarlo per visualizzarlo in azione.

  1. Eseguire l'applicazione.

    go run main.go
    
  2. Apri un browser web e vai a http://localhost:8080 per accedere all'applicazione. La pagina Web avrà un aspetto simile al seguente:

    Screenshot dell'app web gin prima dell'aggiornamento.

  3. Passare all'archivio di configurazione dell'applicazione e aggiornare il valore della chiave Config.Message.

    Chiave Valore Tipo di contenuto
    Config.Message Ciao da Azure App Configuration, ora con aggiornamenti in tempo reale! Lasciare vuoto
  4. Dopo aver aggiornato il browser alcune volte, il contenuto aggiornato verrà visualizzato dopo l'aggiornamento di ConfigMap in 30 secondi.

    Screenshot dell'aggiornamento dell'app Web

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.