다음을 통해 공유


자습서: Go 콘솔 앱에서 동적 구성 새로 고침 사용

이 빠른 시작에서는 Azure App Configuration에서 구성을 동적으로 새로 고치도록 기본 Go 콘솔 애플리케이션을 향상시킵니다. 이렇게 하면 애플리케이션이 다시 시작하지 않고도 구성 변경 내용을 선택할 수 있습니다.

필수 조건

App Configuration에서 데이터 다시 로드

  1. appconfig.go파일을 엽니다. 함수 내에서 loadAzureAppConfiguration 함수의 새로 고침 기능을 활성화하도록 options를 업데이트합니다. Go 공급자는 선택한 키 값( Config 로 시작하고 레이블이 없는 키 값)의 변경 내용을 감지할 때마다 전체 구성을 다시 로드합니다. 구성 변경 내용을 모니터링하는 방법에 대한 자세한 내용은 구성 새로 고침에 대한 모범 사례를 참조하세요.

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

    팁 (조언)

    Interval 속성을 설정하여 RefreshOptions의 구성 새로 고침 사이의 최소 시간을 지정할 수 있습니다. 이 예제에서는 기본값인 30초를 사용합니다. App Configuration 저장소에 대한 요청 수를 줄여야 하는 경우 더 높은 값으로 조정합니다.

  2. 파일을 unmarshal_sample.go 열고 주 함수에 다음 코드를 추가합니다.

    // Existing code in unmarshal_sample.go
    // ... ...
    fmt.Printf("Timeout: %d seconds\n", config.App.Settings.Timeout)
    fmt.Printf("Retry Count: %d\n", config.App.Settings.RetryCount)
    
    // Register refresh callback to update and display the configuration
    provider.OnRefreshSuccess(func() {
        // Re-unmarshal the configuration
        err := appCfgProvider.Unmarshal(&updatedConfig, nil)
        if err != nil {
            log.Printf("Error unmarshalling updated configuration: %s", err)
            return
        }
    
        // Display the updated configuration
        displayConfig(config)
    })
    
    // Setup a channel to listen for termination signals
    done := make(chan os.Signal, 1)
    signal.Notify(done, syscall.SIGINT, syscall.SIGTERM)
    
    fmt.Println("\nWaiting for configuration changes...")
    fmt.Println("(Update values in Azure App Configuration to see refresh in action)")
    fmt.Println("Press Ctrl+C to exit")
    
    // Start a ticker to periodically trigger refresh
    ticker := time.NewTicker(30 * time.Second)
    defer ticker.Stop()
    
    // Keep the application running until terminated
    for {
        select {
        case <-ticker.C:
            // Trigger refresh in background
            go func() {
                ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
                defer cancel()
    
                if err := provider.Refresh(ctx); err != nil {
                    log.Printf("Error refreshing configuration: %s", err)
                }
            }()
        case <-done:
            fmt.Println("\nExiting...")
            return
        }
    }
    

애플리케이션 실행

  1. 애플리케이션을 실행합니다.

    go run unmarshal_sample.go
    
  2. 애플리케이션을 계속 실행합니다.

  3. App Configuration 저장소로 이동하여 키 값을 업데이트합니다 Config.Message .

    열쇠 가치 콘텐츠 형식
    Config.Message Hello World - 업데이트됨! 비워 둡니다.
  4. 콘솔 애플리케이션을 관찰합니다. 30초 이내에 변경 내용을 감지하고 업데이트된 구성을 표시해야 합니다.

자원을 정리하세요

이 문서에서 만든 리소스를 계속 사용하지 않으려면 여기서 만든 리소스 그룹을 삭제하여 요금이 부과되지 않도록 합니다.

중요합니다

리소스 그룹을 삭제하면 다시 되돌릴 수 없습니다. 리소스 그룹 및 포함된 모든 리소스가 영구적으로 삭제됩니다. 잘못된 리소스 그룹 또는 리소스를 자동으로 삭제하지 않도록 합니다. 유지하려는 다른 리소스가 포함된 리소스 그룹 내에서 이 문서에 대한 리소스를 만든 경우 리소스 그룹을 삭제하는 대신 해당 창에서 각 리소스를 개별적으로 삭제합니다.

  1. Azure Portal에 로그인하고 리소스 그룹을 선택합니다.
  2. 이름으로 필터링 상자에서 리소스 그룹의 이름을 입력합니다.
  3. 결과 목록에서 리소스 그룹 이름을 선택하여 개요를 확인합니다.
  4. 리소스 그룹 삭제를 선택합니다.
  5. 리소스 그룹 삭제를 확인하는 메시지가 표시됩니다. 리소스 그룹의 이름을 입력하여 확인하고 삭제를 선택합니다.

잠시 후, 리소스 그룹 및 모든 해당 리소스가 삭제됩니다.