Partager via


Tutoriel : Utiliser la configuration dynamique dans une application web Gin

Ce tutoriel montre comment implémenter des mises à jour de configuration dynamique dans une application web Gin à l’aide d’Azure App Configuration. Il s’appuie sur l’application web introduite dans le guide de démarrage rapide précédent.

Conditions préalables

Terminez le guide de démarrage rapide : Créer une application web Gin avec Azure App Configuration.

Recharger des données à partir d’Azure App Configuration

  1. Ouvrez le fichier appconfig.go. Dans la fonction loadAzureAppConfiguration, mettez à jour options pour permettre l'actualisation. Le fournisseur Go recharge la configuration entière chaque fois qu’il détecte une modification dans l’une des valeurs de clé sélectionnées. Pour plus d’informations sur la surveillance des modifications de configuration, consultez les meilleures pratiques pour l’actualisation de la configuration.

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

    Conseil / Astuce

    Vous pouvez définir la Interval propriété de la RefreshOptions propriété pour spécifier la durée minimale entre les actualisations de configuration. Dans cet exemple, vous utilisez la valeur par défaut de 30 secondes. Choisissez une valeur plus élevée si vous devez réduire le nombre de demandes adressées à votre magasin App Configuration.

  2. Mettez à jour votre main.go fichier pour inscrire une fonction de rappel pour les mises à jour de configuration :

    // 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. Ajoutez un intergiciel d’actualisation de configuration. Mettez à jour main.go à l’aide du code suivant.

    // 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. Utilisez l’intergiciel d’actualisation de la configuration :

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

Actualisation de la configuration pilotée par les demandes

L’actualisation de la configuration est déclenchée par les demandes entrantes adressées à votre application web. Aucune actualisation ne se produit si votre application est inactive. Lorsque votre application est active, l’intergiciel d’actualisation de la configuration surveille les valeurs de clé sélectionnées que vous avez configurées dans azureappconfiguration.Options. L’intergiciel est déclenché lors de chaque demande entrante adressée à votre application. Toutefois, l’intergiciel envoie uniquement des requêtes pour vérifier la valeur dans App Configuration lorsque l’intervalle d’actualisation que vous définissez est passé.

  • En cas d’échec d’une demande de détection de changements adressée à App Configuration, votre application continue d’utiliser la configuration mise en cache. De nouvelles tentatives de recherche des changements sont effectuées régulièrement tant qu’il existe de nouvelles demandes entrantes adressées à votre application.
  • L’actualisation de la configuration se produit de manière asynchrone par rapport au traitement des demandes entrantes de votre application. Cela ne bloque pas ou ne ralentit pas la requête entrante qui a déclenché l'actualisation. La demande qui a déclenché l’actualisation peut ne pas obtenir les valeurs de configuration mises à jour, mais les demandes ultérieures obtiendront de nouvelles valeurs de configuration.
  • Pour vous assurer que l’intergiciel est déclenché, utilisez l’intergiciel d’actualisation de la configuration dès que nécessaire dans votre pipeline de requête afin qu’un autre intergiciel ne l’ignore pas dans votre application.

Exécuter l’application web

Maintenant que vous avez configuré l’actualisation de la configuration dynamique, testons-la pour voir comment cela fonctionne.

  1. Exécutez l’application.

     go mod tidy
     go run .
    
  2. Ouvrez un navigateur web et naviguez jusqu'à http://localhost:8080 pour accéder à votre application. La page web ressemble à ceci :

    Capture d’écran de la mise à jour précédente de l’application web gin.

  3. Accédez à votre magasin App Configuration et mettez à jour la valeur de la Config.Message clé.

    Clé Valeur Type de contenu
    Config.Message Bonjour à partir d’Azure App Configuration - maintenant avec des mises à jour actives ! Laissez ce champ vide
  4. Après avoir actualisé le navigateur quelques fois, vous verrez le contenu mis à jour une fois le ConfigMap mis à jour en 30 secondes.

    Capture d’écran après le rafraîchissement de l'application web gin.

Nettoyer les ressources

Si vous ne souhaitez plus utiliser les ressources créées dans cet article, supprimez le groupe de ressources que vous avez créé ici afin d’éviter des frais.

Important

La suppression d’un groupe de ressources est irréversible. Le groupe de ressources et toutes les ressources qu’il contient sont supprimés définitivement. Veillez à ne pas supprimer accidentellement les mauvaises ressources ou le mauvais groupe de ressources. Si vous avez créé les ressources pour cet article dans un groupe de ressources contenant d’autres ressources que vous souhaitez conserver, supprimez chaque ressource individuellement à partir de son volet, au lieu de supprimer l’intégralité du groupe de ressources.

  1. Connectez-vous au portail Azure, puis sélectionnez Groupes de ressources.
  2. Dans la zone Filtrer par nom, entrez le nom de votre groupe de ressources.
  3. Dans la liste de résultats, sélectionnez le nom du groupe de ressources pour afficher une vue d’ensemble.
  4. Sélectionnez Supprimer le groupe de ressources.
  5. Vous êtes invité à confirmer la suppression du groupe de ressources. Entrez le nom de votre groupe de ressources à confirmer, puis sélectionnez Supprimer.

Après quelques instants, le groupe de ressources et toutes ses ressources sont supprimés.