Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
Abra el archivo
appconfig.go
. Dentro de la funciónloadAzureAppConfiguration
, actualiceoptions
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 deRefreshOptions
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.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 } })
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() } }
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.
Ejecute la aplicación.
go run main.go
Abra un explorador web y navegue a
http://localhost:8080
para acceder a su aplicación. La página web tiene este aspecto: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 Después de actualizar el explorador varias veces, verá el contenido actualizado una vez que ConfigMap se actualiza en 30 segundos.
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.
- Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
- En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
- En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
- Seleccione Eliminar grupo de recursos.
- 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.