Udostępnij za pośrednictwem


Samouczek: używanie dynamicznej konfiguracji w aplikacji internetowej Gin

W tym samouczku pokazano, jak wdrożyć dynamiczne aktualizacje konfiguracji w aplikacji internetowej Gin przy użyciu usługi Azure App Configuration. Jest ona oparta na aplikacji internetowej wprowadzonej w poprzednim przewodniku Szybki start.

Wymagania wstępne

Zakończ Szybki start: Utwórz aplikację webową Gin za pomocą usługi Azure App Configuration

Ponowne ładowanie danych z usługi App Configuration

  1. Otwórz plik appconfig.go. Wewnątrz funkcji loadAzureAppConfiguration, zaktualizuj options, aby włączyć odświeżanie. Dostawca języka Go ponownie załaduje całą konfigurację za każdym razem, gdy wykryje zmianę w dowolnej z wybranych wartości klucza. Aby uzyskać więcej informacji na temat monitorowania zmian konfiguracji, zobacz Najlepsze rozwiązania dotyczące odświeżania konfiguracji.

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

    Wskazówka

    Można ustawić właściwość Interval elementu RefreshOptions, aby określić minimalny czas między odświeżeniami konfiguracji. W tym przykładzie użyjesz wartości domyślnej 30 sekund. Dostosuj do wyższej wartości, jeśli musisz zmniejszyć liczbę żądań wysyłanych do magazynu usługi App Configuration.

  2. main.go Zaktualizuj plik, aby zarejestrować funkcję wywołania zwrotnego na potrzeby aktualizacji konfiguracji:

    // 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. Dodaj middleware do odświeżania konfiguracji. Zaktualizuj main.go za pomocą następującego kodu.

    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. Użyj oprogramowania pośredniczącego do odświeżania konfiguracji

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

Odświeżanie konfiguracji opartej na żądaniach

Odświeżanie konfiguracji jest wyzwalane przez przychodzące żądania do aplikacji internetowej. W przypadku bezczynności aplikacji nie zostanie wykonane żadne odświeżanie. Gdy aplikacja jest aktywna, oprogramowanie pośredniczące monitorujące odświeżanie konfiguracji śledzi wybrane przez Ciebie wartości kluczy skonfigurowane w azureappconfiguration.Options. Oprogramowanie pośredniczące jest wyzwalane po każdym żądaniu przychodzącym do aplikacji. Jednak oprogramowanie pośredniczące będzie wysyłać żądania tylko w celu sprawdzenia wartości w usłudze App Configuration po upływie ustawionego interwału odświeżania.

  • Jeśli żądanie do usługi App Configuration dotyczące wykrywania zmian nie powiedzie się, aplikacja będzie nadal używać buforowanej konfiguracji. Nowe próby sprawdzenia zmian będą podejmowane okresowo, gdy do aplikacji będą napływać nowe żądania.
  • Odświeżanie konfiguracji odbywa się równolegle z procesem przetwarzania żądań przychodzących aplikacji. Nie spowoduje to zablokowania ani spowolnienia żądania przychodzącego, które wyzwoliło odświeżanie. Żądanie, które wyzwoliło odświeżanie, może nie uzyskać zaktualizowanych wartości konfiguracji, ale późniejsze żądania otrzymają nowe wartości konfiguracji.
  • Aby upewnić się, że oprogramowanie pośredniczące zostało wyzwolone, umieść oprogramowanie pośredniczące do odświeżania konfiguracji na jak najwcześniejszym etapie w potoku żądania, aby inne oprogramowanie pośredniczące nie mogło go pominąć w aplikacji.

Uruchamianie aplikacji internetowej

Po skonfigurowaniu dynamicznego odświeżania konfiguracji przetestujmy ją, aby zobaczyć ją w działaniu.

  1. Uruchom aplikację.

    go run main.go
    
  2. Otwórz przeglądarkę internetową i przejdź do http://localhost:8080 aby uzyskać dostęp do swojej aplikacji. Strona internetowa wygląda następująco:

    Zrzut ekranu aplikacji internetowej gin przed odświeżeniem.

  3. Przejdź do swojego sklepu App Configuration i zaktualizuj wartość klucza Config.Message.

    Klawisz Wartość Typ zawartości
    Config.Message Witaj z usługi Azure App Configuration — teraz z aktualizacjami na żywo! Pozostaw pole puste
  4. Po odświeżeniu przeglądarki kilka razy zobaczysz zaktualizowaną zawartość po zaktualizowaniu obiektu ConfigMap w ciągu 30 sekund.

    Zrzut ekranu przedstawiający aplikację internetową Gin po jej odświeżeniu.

Uprzątnij zasoby

Jeśli nie chcesz nadal korzystać z zasobów utworzonych w tym artykule, usuń utworzoną tutaj grupę zasobów, aby uniknąć naliczania opłat.

Ważne

Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów i wszystkie zasoby w niej są trwale usuwane. Upewnij się, że nie usuniesz przypadkowo niewłaściwej grupy zasobów lub zasobów. Jeśli zasoby dla tego artykułu zostały utworzone w grupie zasobów zawierającej inne zasoby, które chcesz zachować, usuń każdy zasób oddzielnie z odpowiedniego okienka zamiast usuwać grupę zasobów.

  1. Zaloguj się do witryny Azure Portal i wybierz pozycję Grupy zasobów.
  2. W polu Filtruj według nazwy wprowadź nazwę grupy zasobów.
  3. Na liście wyników wybierz nazwę grupy zasobów, aby wyświetlić przegląd.
  4. Wybierz pozycję Usuń grupę zasobów.
  5. Poproszono Cię o potwierdzenie usunięcia grupy zasobów. Wprowadź nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń.

Po kilku chwilach grupa zasobów i wszystkie jej zasoby zostaną usunięte.