Centro de registro/gestión de configuración——SpringCloud Alibaba Nacos

Introducción a Nacos

Nacos es una plataforma dinámica de descubrimiento, configuración y gestión de servicios fácil de usar para crear aplicaciones nativas de la nube.

Las características clave de Nacos incluyen las siguientes:

  • Descubrimiento de servicios y monitoreo del estado del servicio: después de que el proveedor de servicios registra el servicio utilizando SDK nativo, OpenAPI, etc., el consumidor del servicio puede usar HTTP y API para buscar y descubrir el servicio. Nacos proporciona controles de estado de los servicios en tiempo real y evita solicitudes de hosts o instancias de servicios en mal estado.
  • Servicio de configuración dinámica: El servicio de configuración dinámica le permite gestionar la configuración de aplicaciones y la configuración de servicios de todos los entornos de forma centralizada, externa y dinámica. La configuración dinámica elimina la necesidad de volver a implementar aplicaciones y servicios cuando cambia la configuración, lo que hace que la gestión de la configuración sea más eficiente y ágil.
  • Servicio DNS dinámico: el servicio DNS dinámico admite enrutamiento ponderado, lo que facilita la implementación de equilibrio de carga de nivel medio, políticas de enrutamiento más flexibles, control de tráfico y servicios simples de resolución de DNS para intranets de centros de datos.
  • Gestión de servicios y metadatos: Nacos gestiona todos los servicios y metadatos en el centro de datos desde la perspectiva de la construcción de la plataforma de microservicios, incluida la descripción del servicio de gestión, el ciclo de vida, el análisis de dependencia estática de los servicios, el estado de salud del servicio, la gestión del tráfico del servicio, las políticas de enrutamiento y seguridad. SLA de servicio y estadísticas de métricas primarias

Inicio rápido de Nacos

1. Modo independiente del servidor Nacos

Antes de usar Nacos, debe descargar Nacos e iniciar Nacos Server. Nacos Server tiene dos modos de funcionamiento: independiente (máquina única) y clúster (clúster). Aquí tomamos la versión 2.2.3, entorno Windows como ejemplo.

前往 Github 下载 Nacos Server: GitHub - alibaba/nacos: una plataforma de gestión de servicios, configuración y descubrimiento de servicios dinámicos fácil de usar para crear aplicaciones nativas de la nube.

Descomprima el paquete comprimido y ejecute el comando en el directorio bin.\startup.cmd -m standalone

Visite: http://localhost:8848/nacos en el navegador, ingrese el nombre de usuario y la contraseña Nacos/Nacos para ingresar a la página de inicio de Nacos

Para cerrar Nacos, ejecute el comando en el directorio bin.\shutdown.cmd

Nacos antes de la versión 0.7 usaba una base de datos en línea para almacenar datos en modo independiente, lo que era inconveniente para observar la situación básica del almacenamiento de datos. Después de la versión 0.7, admite capacidades de fuente de datos MySQL. Los pasos de operación específicos son los siguientes:

  • Instale la base de datos MySQL (se requiere la versión 5.6.5+)

  • Cree la base de datos nacos_config, busque el archivo de inicialización mysql-schema.sql en el directorio conf e inicialícelo

  • Modifique el archivo conf/applicationproperties y agregue la configuración de fuente de datos MySQL

    ### Count of DB:
    db.num=1
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=root
    db.password.0=123
    
  • Luego, todos los datos en Nacos se guardarán en MySQL.

2. Modo de clúster del servidor Nacos

El modo independiente de Nacos solo es adecuado para pruebas y uso independiente. La mayoría de los entornos de producción utilizan el modo de clúster para garantizar una alta disponibilidad.

A continuación, explicaremos cómo construir un entorno de clúster Nacso, los pasos específicos son los siguientes:

  • Copie el paquete de instalación de Nacos descargado en dos copias y asígneles el nombre Nacos-01, Nacos-02 y Nacos-03 respectivamente. Tenga en cuenta que el modo de clúster debe utilizar una base de datos de configuración (como MySQL).

  • Modifique los archivos de configuración conf/applicationproperties de Nacos-02 y Nacos-03, y cambie los puertos de inicio del servicio a 8850 y 8852 respectivamente.

    #*************** Config Module Related Configurations ***************#
    ### If use MySQL as datasource:
    ### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
    spring.datasource.platform=mysql
    spring.sql.init.platform=mysql
    #*************** Spring Boot Related Configurations ***************#
    ### Default web context path:
    server.servlet.contextPath=/nacos
    ### Include message field
    server.error.include-message=ALWAYS
    ### Default web server port:
    server.port=8850
    

    Nota: Después de la versión 2.0, nacos también ocupa otros tres puertos además del puerto externo:

    • puerto de balsa: ${server.port} - 1000
    • puerto grpc: ${server.port} + 1000
    • Puerto grpc para el servidor: ${server.port} + 1001

    Supongamos que el puerto externo es 8848, es decir, se ocuparán un total de 4 puertos, a saber, 7848, 8848, 9848 y 9849. Por lo tanto, al iniciar varios nodos nacos en la misma máquina, tenga cuidado de evitar todos los puertos ocupados.

  • Agregue el archivo de configuración del clúster cluster.conf en el directorio conf de Nacos-01, Nacos-02 y Nacos-03.

    ### 这里简单将3个nacos实例部署在同一个机器下
    # 
    127.0.0.1:8848
    127.0.0.1:8850
    127.0.0.1:8852
    
  • Ingrese al directorio bin de Nacos-01, Nacos-02 y Nacos-03 para ejecutar el comando.Si .\startup.cmdno hay parámetros, el modo predeterminado es el modo clúster.

3. Modo de clúster Nacos + Nginx

Agregue la siguiente configuración al archivo de configuración principal de Nginx nginx.conf

server {
	listen       8847;
	server_name  localhost;

	location /nacos {
		proxy pass http://nacos-server/nacos;
	}

	upstream nacos-server {
		server 127.0.0.1:8848;
		server 127.0.0.1:8850;
		server 127.0.0.1:8852;
	}
}

Inicie Nginx y visite: http://localhost:8847/nacos. En este punto, hemos completado la construcción de Nacos + Nginx.


SpringBoot registrado en Nacos

1. Gestión de la configuración de Nacos

Tomando SpringBoot 2.3.12.RELEASE como ejemplo, agregue las siguientes dependencias al archivo pom.xml del proyecto:

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

Configure la dirección del servidor Nacos en application.properties

# 如果搭建了集群只需要填其中一个节点的ip:port即可
nacos.config.server-addr=127.0.0.1:8848
# 如果配置了Nginx,则输入配置的地址,如上面我配置的
# nacos.config.server-addr=127.0.0.1:8847/nacos

Úselo en la clase de inicio para @NacosPropertySourcecargar dataId como fuente de configuración de springboot-nacos-config y habilitar actualizaciones automáticas.

@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringbootNacosApplication.class, args);
    }
}

Data-Id: springboot-nacos-configPor supuesto, necesitamos agregar el archivo de configuración a la lista de configuración de Nacos.

test.name=hahaha

@NacosValueEstablecer valores de propiedad a través de anotaciones de Nacos

@RestController("config")
public class ConfigCon {
    
    

    @NacosValue(value = "${test.name}", autoRefreshed = true)
    private String name;


    @GetMapping("get")
    public String get() {
    
    
        return name;
    }
}
2. Registro del servicio Nacos

Agregue las siguientes dependencias al archivo pom.xml del proyecto:

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

Configure la dirección del servidor Nacos en application.properties

spring.application.name=springboot-nacos
server.port=8080
server.address=127.0.0.1

# 如果搭建了集群只需要填其中一个节点的ip:port即可
nacos.discovery.server-addr=127.0.0.1:8848
# 如果配置了Nginx,则输入配置的地址,如上面我配置的
nacos.discovery.server-addr=127.0.0.1:8847/nacos

Modifique la clase de inicio y ejecútela

@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication implements CommandLineRunner {
    
    

    // 使用@NacosInjected注入Nacos的NamingService实例
    // NamingService是Nacos对外提供给使用者的接口
    @NacosInjected
    private NamingService namingService;

    @Value("${spring.application.name}")
    private String applicationName;

    @Value("${server.port}")
    private Integer serverPort;

    @Value("${server.address}")
    private String serverAddress;

    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringbootNacosApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
    
    
        //应用启动时,将服务注册到Nacos
        namingService.registerInstance(applicationName, serverAddress, serverPort);
    }
}

Nacos PrimaveraNube

Esta sección explica principalmente cómo SpringCloud implementa la gestión de configuración y el descubrimiento de servicios a través de Nacos, tomando SpringBoot 2.3.12.RELEASE como ejemplo.

1. Gestión de la configuración de Nacos

Agregue las siguientes dependencias al archivo pom.xml del proyecto:

<dependencies>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.10-RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Configure la dirección del servidor Nacos en application.properties

server.port=8080
spring.application.name=springcloud-nacos

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# spring.cloud.nacos.config.server-addr=127.0.0.1:8847/nacos

spring.application.nameLuego formará parte del campo de datos de gestión de configuración de Nacos. En Nacos Spring Cloud, el formato completo de datald es el siguiente:${prefix}-${spring.profile.active}.${file-extension}

  • ${prefix}: El valor predeterminado es spring.application.nameel de , que también se puede spring.cloud.Nacos.config.prefixconfigurar a través del elemento de configuración
  • ${spring.profile.active}: Perfil correspondiente al entorno actual. Cuando spring.profile.activeestá vacío, el conector correspondiente -no existirá y el formato de empalme de datald se convierte en${prefix}.${file-extension}
  • ${file-extension}: El formato de datos del contenido de configuración, puede configurar las propiedades o el tipo yaml a través de `spring.cloud.Nacos.config.file-extension·

Cree el archivo de configuración springcloud-nacos.properties en la lista de configuración de Nacos

test.name=hahah

Desarrollar controlador para obtener configuración.

@RefreshScope
@RestController("config")
public class ConfigCon {
    
    

    @Value("${test.name}")
    private String name;

    @GetMapping("get")
    public String get() {
    
    
        return name;
    }
}
2. Registro del servicio Nacos

Agregue las siguientes dependencias al archivo pom.xml del proyecto:

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.10-RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Configure la dirección del servidor Nacos en application.properties

server.port=8080
spring.application.name=springcloud-nacos

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8847/nacos

Agregue anotaciones a la clase de inicio para @EnableDiscoveryClienthabilitar la función de descubrimiento de registro de servicios

@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudNacosApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(SpringcloudNacosApplication.class, args);
    }
}

Verifique la lista de servicios en la página de administración de Nacos y descubra que el servicio se ha registrado en Nacos. Tanto el proveedor de servicios como el consumidor se registran de esta manera. Después de eso, el consumidor puede llamar directamente a la interfaz del proveedor a través del nombre del servicio.


Espacios de nombres y grupos

Además de DataId, Nacos también proporciona un espacio de nombres (Namespace) y un grupo de configuración (Grupo) para la configuración organizacional. La misma configuración de grupo o DataId puede existir en diferentes espacios de nombres. De la misma manera, el mismo DataId puede existir en diferentes Grupos

En general, es mejor utilizar Namespace para distinguir entornos (dev, sit, uat, prod) y Group para distinguir microservicios o proyectos. La gestión de permisos de Nacos puede controlar espacios de nombres, pero no grupos. Diferentes cuentas corresponden a diferentes entornos y pueden aislar cada entorno.

En el espacio de nombres llamado dev en la consola de Nacos, cree un grupo llamado springcloud-project y un archivo de configuración llamado service-01.yml debajo de él.

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Cree el archivo de configuración bootstrap.yml en el proyecto

server:
  port: 8000
spring:
  application:
    name: service-01
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8847/nacos
        namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99	# 命名空间id
        group: springcloud-project	# 分组名
        file-extension: yml	# 指定格式
      discovery:
        server-addr: 127.0.0.1:8847/nacos
        namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99	# 命名空间id
        group: springcloud-project	# 分组名

Cree una clase TestCon y obtenga valores de configuración

@Slf4j
@RestController
public class TestCon {
    
    

    @Value("${test.value}")
    private String testValue;

    @GetMapping("/test/getConfig")
    public void getConfig() {
    
    
        log.info("testValue: {}", testValue);
    }
}

Supongo que te gusta

Origin blog.csdn.net/CSDN_handsome/article/details/132132860
Recomendado
Clasificación