Compartilhar via


Tutorial: Usar a configuração dinâmica em um aplicativo web Gin

Este tutorial mostra como você pode implementar atualizações de configuração dinâmicas em um aplicativo Web Gin usando a Configuração de Aplicativos do Azure. Ele se baseia no aplicativo Web apresentado no início rápido anterior.

Pré-requisitos

Concluir o início rápido: Criar um aplicativo Web Gin com a Configuração de Aplicativo do Azure

Recarregar os dados da Configuração de Aplicativo

  1. Abra o arquivo appconfig.go. Dentro da função loadAzureAppConfiguration, atualize o options para habilitar a atualização. O provedor Go recarregará toda a configuração sempre que detectar uma alteração em qualquer um dos valores de chave selecionados. Para obter mais informações sobre como monitorar alterações de configuração, consulte As práticas recomendadas para atualização de configuração.

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

    Dica

    Você pode definir a Interval propriedade do RefreshOptions para especificar o tempo mínimo entre as atualizações de configuração. Neste exemplo, você usa o valor padrão de 30 segundos. Ajuste para um valor mais alto se você precisar reduzir o número de solicitações feitas ao repositório de Configuração de Aplicativos.

  2. Atualize seu arquivo main.go para registrar uma função de retorno de chamada para atualizações de configuração:

    // 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. Adicione um middleware de atualização de configuração. Atualize main.go com o seguinte código.

    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. Use o middleware de atualização de configuração:

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

Atualização de configuração controlada por solicitação

A atualização de configuração é disparada pelas solicitações de entrada ao aplicativo Web. Nenhuma atualização ocorrerá se o aplicativo estiver ocioso. Quando o aplicativo estiver ativo, o middleware de atualização de configuração monitorará os pares chave-valor selecionados que você configurou em azureappconfiguration.Options. O middleware é acionado a cada solicitação de entrada para o aplicativo. No entanto, o middleware só enviará solicitações para verificar o valor na Configuração do Aplicativo quando o intervalo de atualização definido tiver passado.

  • Se uma solicitação à Configuração de Aplicativos para detecção de alterações falhar, o aplicativo continuará a usar a configuração armazenada em cache. Novas tentativas de verificar se há alterações serão feitas periodicamente enquanto houver novas solicitações de entrada no aplicativo.
  • A atualização de configuração ocorre de forma assíncrona para o processamento das solicitações de entrada do aplicativo. Ela não bloqueará nem reduzirá a velocidade da solicitação de entrada que disparou a atualização. Talvez a solicitação que disparou a atualização não receba os valores de configuração atualizados, mas solicitações posteriores receberão.
  • Para garantir que o middleware seja acionado, use o middleware de atualização de configuração o mais cedo possível no pipeline de solicitação, para que outro middleware não o ignore em seu aplicativo.

Executar o aplicativo Web

Agora que você configurou a atualização de configuração dinâmica, vamos testá-la para vê-la em ação.

  1. Execute o aplicativo.

    go run main.go
    
  2. Abra um navegador da Web e acesse http://localhost:8080 para acessar seu aplicativo. A página da Web tem esta aparência:

    Captura de tela da atualização do aplicativo Web Gin anterior.

  3. Navegue até o repositório de Configuração de Aplicativos e atualize o valor da Config.Message chave.

    Chave Valor Tipo de conteúdo
    Config.Message Olá da Configuração de Aplicativos do Azure – agora com atualizações ao vivo! Deixe o campo vazio
  4. Depois de atualizar o navegador algumas vezes, você verá o conteúdo atualizado depois que o ConfigMap for atualizado em 30 segundos.

    Captura de tela do aplicativo web gin após a atualização.

Limpar os recursos

Se não deseja continuar usando os recursos criados neste artigo, exclua o grupo de recursos que você criou aqui para evitar encargos.

Importante

A exclusão de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Certifique-se de não excluir o grupo de recursos ou os recursos incorretos acidentalmente. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que você deseja manter, exclua cada um individualmente do respectivo painel em vez de excluir o grupo de recursos.

  1. Entre no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
  4. Selecione Excluir grupo de recursos.
  5. Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Insira o nome do grupo de recursos para confirmar e selecione Excluir.

Após alguns instantes, o grupo de recursos e todos os recursos dele são excluídos.