Compartir a través de


Tutorial: Uso de la configuración dinámica en una aplicación web Gin

En este tutorial se muestra cómo puede implementar actualizaciones de configuración dinámicas en una aplicación web Gin mediante Azure App Configuration. Se basa en la aplicación web introducida en el inicio rápido anterior.

Prerrequisitos

Finalice el inicio rápido: Creación de una aplicación web Gin con Azure App Configuration

Recarga de datos de App Configuration

  1. Abra el archivo appconfig.go. Dentro de la función loadAzureAppConfiguration, actualice options para habilitar el refresco. El proveedor Go volverá a cargar toda la configuración siempre que detecte un cambio en cualquiera de los valores clave seleccionados. Para obtener más información sobre la supervisión de los cambios de configuración, consulte Procedimientos recomendados para la actualización de la configuración.

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

    Sugerencia

    Puede establecer la Interval propiedad de RefreshOptions para especificar el tiempo mínimo entre las actualizaciones de configuración. En este ejemplo, usará el valor predeterminado de 30 segundos. Ajusta a un valor mayor si necesitas reducir el número de solicitudes realizadas en la tienda de Configuración de Aplicaciones.

  2. Actualice el main.go archivo para registrar una función de devolución de llamada para las actualizaciones de configuración:

    // 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. Agregue un middleware de actualización de configuración. Actualice main.go con el código siguiente.

    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 el middleware de actualización de configuración:

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

Actualización de configuración controlada por solicitudes

La actualización de configuración se desencadena mediante las solicitudes entrantes a la aplicación web. No se producirá ninguna actualización si la aplicación está inactiva. Cuando la aplicación está activa, el middleware de actualización de configuración supervisa los valores de clave seleccionados que configuró en azureappconfiguration.Options. El middleware se desencadena en cada solicitud entrante a la aplicación. Sin embargo, el middleware solo enviará solicitudes para comprobar el valor en App Configuration cuando se haya superado el intervalo de actualización establecido.

  • Si se produce un error en una solicitud de detección de cambios de App Configuration, la aplicación seguirá utilizando la configuración almacenada en la caché. Los nuevos intentos de buscar cambios se realizarán periódicamente mientras haya nuevas solicitudes entrantes a la aplicación.
  • La actualización de la configuración se produce de forma asincrónica con respecto al procesamiento de las solicitudes entrantes de la aplicación. No bloqueará ni ralentizará la solicitud entrante que desencadenó la actualización. Es posible que no se actualicen los valores de configuración de la solicitud que desencadenó la actualización, pero sí lo harán las solicitudes posteriores.
  • Para asegurarse de que el middleware se active, use el middleware de actualización de configuración tan pronto como sea apropiado en la tubería de solicitudes para que otro middleware no lo omita en la aplicación.

Ejecución de la aplicación web

Ahora que ha configurado la actualización de configuración dinámica, vamos a probarla para verla en acción.

  1. Ejecute la aplicación.

    go run main.go
    
  2. Abra un explorador web y navegue a http://localhost:8080 para acceder a su aplicación. La página web tiene este aspecto:

    Recorte de pantalla de la actualización de la aplicación web gin antes.

  3. Vaya a su tienda de configuración de aplicaciones y actualice el valor de la clave Config.Message.

    Clave Importancia Tipo de contenido
    Config.Message Hola desde Azure App Configuration: ahora con actualizaciones en directo. Dejar en blanco
  4. Después de actualizar el explorador varias veces, verá el contenido actualizado una vez que ConfigMap se actualiza en 30 segundos.

    Captura de pantalla después de la actualización de la aplicación web gin.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.