Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
Aprire il file
appconfig.go
. All'interno della funzioneloadAzureAppConfiguration
, aggiornareoptions
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
diRefreshOptions
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.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 } })
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() } }
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.
Eseguire l'applicazione.
go run main.go
Apri un browser web e vai a
http://localhost:8080
per accedere all'applicazione. La pagina Web avrà un aspetto simile al seguente: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 Dopo aver aggiornato il browser alcune volte, il contenuto aggiornato verrà visualizzato dopo l'aggiornamento di ConfigMap in 30 secondi.
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.
- Accedere al portale di Azure e selezionare Gruppi di risorse.
- Nella casella Filtra per nome immettere il nome del gruppo di risorse.
- Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
- Selezionare Elimina gruppo di risorse.
- 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.