Explicación detallada a nivel práctico de la introducción del componente de código abierto Nacos de Ali en el marco Spring como centro de configuración

Centro de configuración de Nacos

Primero hablemos sobre qué es un centro de configuración y por qué debería usarlo. En pocas palabras, el centro de configuración es un producto de administración de configuración que puede centralizar, administrar de manera flexible y dinámica varios parámetros de configuración en el sistema, como agregar, eliminar, modificar, verificar interruptores de función, configuración de conexión de base de datos, dirección de solicitud de servicio, etc. La llamada centralización significa que existe una plataforma de administración unificada; flexible, sin necesidad de modificar el código, asignación de coincidencia automática, aislamiento de configuración; dinámico, sin necesidad de reiniciar el servicio para que el cambio surta efecto, y empujar o tirar activamente el valor cambiado.

Para los parámetros de configuración, el método tradicional temprano era escribir los valores de los parámetros en el código a través de la codificación del programa. Si desea cambiar los valores de los parámetros, no solo necesita modificar el código, sino que también debe volver a implementar. La redistribución es apenas aceptable y la modificación del código generará confusión en el código. Si lo piensa, si hay N valores de parámetros de configuración diferentes en diferentes entornos de implementación, ¿es necesario cambiar el código cada vez que implementa un ambiente, por lo que esto es absolutamente insoportable. Para resolver este problema, coloque los parámetros de configuración en el archivo de configuración o la base de datos, y modifique el valor del parámetro directamente cuando necesite modificar el valor del parámetro. No necesita cambiar el código, pero a veces aún necesita volver a implementar porque no puede poner todos los parámetros en el Está configurado en la base de datos, y la base de datos se lee con frecuencia, y los cambios de parámetros no pueden tener efecto a tiempo.Además, no es muy conveniente administrar en forma de archivos o bases de datos a menos que se desarrolle una plataforma de gestión. Por lo tanto, nació el centro de configuración, que puede centralizar, administrar de manera flexible y dinámica estas configuraciones de parámetros.

Nacos proporciona una consola de administración simple y fácil de usar a través de la cual se pueden administrar todos los servicios y configuraciones de aplicaciones. La configuración dinámica de Nacos elimina la necesidad de volver a implementar aplicaciones y servicios cuando se producen cambios de configuración, lo que hace que la gestión de la configuración sea más eficiente y ágil. También proporciona una serie de funciones de administración de configuración listas para usar, que incluyen el seguimiento de la versión de configuración, el lanzamiento controlado, la configuración de reversión con un clic y el seguimiento del estado de actualización de la configuración del cliente, para administrar de manera más segura los cambios de configuración y reducir el riesgo de configuración. cambios.

Conceptos relacionados en el centro de configuración de Nacos

Elementos de configuración : suelen existir en forma de clave-valor, por ejemplo:

database.trade.connect.url=jdbc:mysql://127.0.0.1:3306/trade。

Conjunto de configuración : una colección de elementos de configuración relacionados o no relacionados se denomina conjunto de configuración. En el sistema, un archivo de configuración suele ser un conjunto de configuración, que contiene la configuración de todos los aspectos del sistema. Por ejemplo, un conjunto de configuración puede contener elementos de configuración como el origen de datos, el grupo de subprocesos y el nivel de registro.

ID del conjunto de configuración : el ID de un determinado conjunto de configuración, representado por ID de datos. Un sistema o aplicación puede contener varios conjuntos de configuración. Se recomienda utilizar un nombre significativo para cada conjunto de configuración y garantizar la exclusividad global, como
trade-datasource.properties. Se recomienda que Data ID adopte las reglas de nomenclatura de paquetes similares a Java para garantizar la exclusividad global, como com.abc.trade.datasource.properties. Cabe señalar que Nacos admite el análisis de elementos de configuración en JSON, XML, YAML y propiedades. formatos de forma predeterminada, por lo que si el ID de datos El nombre contiene ., y su sufijo de nombre debe terminar con .json/.xml/.yaml/.properties.Si el nombre del ID de datos no contiene ., Nacos usa el formato .properties para analizar el elemento de configuración de forma predeterminada.

Agrupación de configuración : Agrupe los conjuntos de configuración por una cadena significativa para distinguir los conjuntos de configuración con el mismo ID de datos, como Pago, Comercio, etc. Al crear una configuración en Nacos, si no se completa el nombre del grupo de configuración, DEFAULT_GROUP se usará como el nombre del grupo de configuración predeterminado.

Espacio de nombres (Namespace) : bajo diferentes espacios de nombres, puede existir el mismo grupo de configuración o configuración de ID de datos. Se utiliza principalmente para distinguir y aislar configuraciones en diferentes entornos.Si no se especifica explícitamente, el espacio de nombres predeterminado es público. Por ejemplo, si las configuraciones del entorno de prueba y el entorno de producción son diferentes, se pueden usar diferentes espacios de nombres para distinguir y aislar diferentes configuraciones.Por ejemplo, el espacio de nombres del entorno de prueba se establece en dev y el espacio de nombres del entorno de producción está configurado para prod.

Un elemento de configuración en el centro de configuración de Nacos está determinado únicamente por el espacio de nombres + el grupo de configuración + el ID del conjunto de configuración + la clave del elemento de configuración.

Para los conceptos presentados anteriormente, aquí hay un ejemplo, como la configuración de la conexión de la base de datos de un sistema comercial, el espacio de nombres del entorno de prueba es dev, el espacio de nombres del entorno de producción es prod, el grupo está representado por Trade y el Data El ID está representado por
trade-datasource.properties para indicar que los elementos de configuración internos incluyen database.trade.connect.url=jdbc:mysql://127.0.0.1:3306/trade.

Spring combina Nacos como centro de configuración

El proyecto utiliza el marco Spring en lugar de Spring Boot y Spring Cloud. Al agregar dependencias de paquetes jar relacionados con Nacos, solo necesita agregar nacos-spring-context. Aquí, maven se usa como ejemplo para mostrar la información de dependencia de nacos- contexto primaveral.

<dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-spring-context</artifactId>
        <version>0.3.6</version>
</dependency>

Primero, habilite Nacos inicializando los valores de parámetros relevantes, como la dirección, el nombre de usuario, la contraseña, el espacio de nombres, etc. del servicio Nacos. Este paso se puede lograr a través de anotaciones o configuración en xml.

El método de anotación debe crear un nuevo NacosConfiguration.java, por supuesto, también puede ser otro nombre de clase y usar la anotación @EnableNacosConfig en esta clase para indicar la dirección, el nombre de usuario, la contraseña y el espacio de nombres del servicio Nacos que se conectará. Por supuesto, hay otros atributos que se pueden configurar, por ejemplo:

@Component
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848", username = "nacos", password = "nacos", namespace = "dev"))
public class NacosConfiguration {
}

En el modo de configuración xml, debe agregar el espacio de nombres xml de nacos y la información xsd correspondiente en la parte superior del xml.

xmlns:nacos="http://nacos.io/schema/nacos"
xsi:schemaLocation="http://nacos.io/schema/nacos http://nacos.io/schema/nacos.xsd"

Luego use la siguiente configuración para habilitar Nacos y establecer valores de parámetros relacionados.

<nacos:annotation-driven />
<nacos:global-properties server-addr="127.0.0.1:8848" username="nacos" password="nacos" namespace="dev"/>

El uso más simple : Obtener el valor de una determinada configuración en el centro de configuración.Si usa el método de anotación para abrir Nacos, debe agregar la anotación @NacosPropertySource al NacosConfiguration.java mencionado anteriormente para indicar el ID de datos, la agrupación de configuración y cambios que se utilizarán Si actualizar automáticamente, el siguiente fragmento de código:

@NacosPropertySource(dataId = "com.example.trade.datasource.properties", groupId = "Trade", autoRefreshed = true)

Si usa el método xml, debe agregar el elemento nacos:property-source en Spring xml en consecuencia. El fragmento de código es el siguiente:

<nacos:property-source data-id="com.example.trade.datasource.properties" auto-refreshed="true" group-id="Trade"/>

Luego use la anotación @NacosValue para inyectar los parámetros de configuración que deben obtenerse en una determinada propiedad. Aquí, para una mejor explicación, escribí un HelloController. El código específico es el siguiente:

@Controller
@RequestMapping
public class HelloController {

        @NacosValue(value = "${useCache:false}", autoRefreshed = true)
        private Boolean useCache;

        @RequestMapping(value = "/hi", method = RequestMethod.GET)
        @ResponseBody
        public String sayHi(){
                return "hi, " + useCache;
        }
}

El código anterior usa la anotación @NacosValue para asignar el valor del parámetro useCache del centro de configuración a la variable useCache y configura autoRefreshed = true, lo que significa que el valor de la propiedad se actualiza automáticamente cuando cambia el valor de useCache del centro de configuración. Para obtener el código detallado de este ejemplo, busque wind7rui/nacos-demo en Github y consulte el subproyecto
nacos-config-spring-simple-demo de nacos-demo.

Si desea inyectar el valor del parámetro del centro de configuración en una propiedad POJO, aquí hay tres métodos.

Método 1 , siga usando la anotación @NacosValue para marcar en el campo de propiedad POJO, pero necesita agregar @NacosPropertySource a NacosConfiguration.java, o configurar el elemento nacos:property-source en xml, y también necesita configurar ID de datos, configuración Agrupación y cambios Ya sea para actualizar automáticamente el valor del atributo, el código de fragmento de muestra es el siguiente:

@Component
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848", username = "nacos", password = "nacos", namespace = "dev"))
@NacosPropertySource(dataId = "com.example.trade.datasource.properties", groupId = "Trade", autoRefreshed = true)
public class NacosConfiguration {
}

@Component
public class DbConnectProperties {
        @NacosValue(value = "${datasource.connect.url}")
        private String url;

        @NacosValue(value = "${datasource.connect.username}")
        private String username;

        @NacosValue(value = "${datasource.connect.password}")
        private String password;

        // 省略getter、setter和toString方法

Método 2 , configurar en xml. Este método necesita escribir los métodos getter y setter de las propiedades correspondientes en el POJO correspondiente. También necesita agregar @NacosPropertySource a NacosConfiguration. Ya sea para actualizar automáticamente el valor del atributo al cambiar, el fragmento de código de muestra es el siguiente:

@Component
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848", username = "nacos", password = "nacos", namespace = "dev"))
@NacosPropertySource(dataId = "com.example.trade.datasource.properties", groupId = "Trade", autoRefreshed = true)
public class NacosConfiguration {
}

public class DbProperties {
        private String url;
        private String username;
        private String password;
        // 省略getter、setter和toString方法

<bean id="dbProperties" class="com.example.DbProperties">
        <property name="url" value="${datasource.connect.url}" />
        <property name="username" value="${datasource.connect.username}" />
        <property name="password" value="${datasource.connect.password}" />
</bean>

Método 3 , use
la anotación @NacosConfigurationProperties. Escriba los métodos getter y setter correspondientes a las propiedades de la clase POJO, luego use la anotación @NacosConfigurationProperties para marcar la clase y establezca los valores de propiedad en la anotación, como prefijo-prefijo de clave de elemento de configuración, agrupación de configuración , Id. de datos, ya sea para actualizar automáticamente, código de fragmento de muestra de la siguiente manera:

@Component
@NacosConfigurationProperties(prefix = "datasource.connect", groupId = "Trade", dataId = "com.example.trade.datasource.properties", autoRefreshed = true)
public class DatasourceProperties {
        private String url;
        private String username;
        private String password;
        // 省略getter、setter和toString方法

Este método solo necesita combinarse con la anotación @EnableNacosConfig, o habilitar la configuración de Nacos en la configuración xml. Preste atención al prefijo del atributo. Por ejemplo, si hay una configuración de parámetro
datasource.connect.username=admin en el centro de configuración, y el nombre del campo de atributo en el POJO es nombre de usuario, entonces el prefijo es datasource.connect en este tiempo, no es necesario agregar., Nacos Agregará automáticamente. durante el mapeo de parámetros.

Para obtener los códigos detallados de los tres métodos anteriores, busque wind7rui/nacos-demo en Github y consulte el subproyecto
nacos-config-spring-pojo-demo de nacos-demo.

Por supuesto, en el proceso de desarrollo real, es imposible tener una sola configuración, es decir, múltiples conjuntos de configuración. En este momento, se pueden usar múltiples @NacosPropertySources para configurarlos por separado, por ejemplo:

@Component
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848", username = "nacos", password = "nacos", namespace = "dev"))
@NacosPropertySource(dataId = "com.example.trade.datasource.properties", groupId = "Trade", autoRefreshed = true)
@NacosPropertySource(dataId = "com.example.order.datasource.properties", groupId = "Order", autoRefreshed = true)
@NacosPropertySource(dataId = "com.example.pay.datasource.properties", groupId = "Pay", autoRefreshed = true)
public class NacosConfiguration {
}

También puede usar la anotación @NacosPropertySources, su valor es una matriz de anotaciones @NacosPropertySource, puede configurar varios conjuntos de configuración, por ejemplo:

@Component
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848", username = "nacos", password = "nacos", namespace = "dev"))
@NacosPropertySources({
        @NacosPropertySource(dataId = "com.example.trade.datasource.properties", groupId = "Trade", autoRefreshed = true),
        @NacosPropertySource(dataId = "com.example.order.datasource.properties", groupId = "Order", autoRefreshed = true),
        @NacosPropertySource(dataId = "com.example.pay.datasource.properties", groupId = "Pay", autoRefreshed = true)
})
public class NacosConfiguration {
}

¡Aprende mucho y luego conoce poco !

Guess you like

Origin blog.csdn.net/dyuan134/article/details/130243076