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.cmd
no 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 @NacosPropertySource
cargar 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-config
Por supuesto, necesitamos agregar el archivo de configuración a la lista de configuración de Nacos.
test.name=hahaha
@NacosValue
Establecer 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.name
Luego 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 esspring.application.name
el de , que también se puedespring.cloud.Nacos.config.prefix
configurar a través del elemento de configuración${spring.profile.active}
: Perfil correspondiente al entorno actual. Cuandospring.profile.active
está 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 @EnableDiscoveryClient
habilitar 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.
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);
}
}