Centro de registro de Spring Cloud + Nacos explicación detallada y ejemplos de desarrollo

Tabla de contenido

1. Las características clave de Nacos incluyen:

2. Introducción a la arquitectura lógica y sus componentes.

3. Instalación de Nacos

1. Selección de versión

2. Preparar el ambiente

3. Descargue el código fuente o el paquete de instalación.

4. Inicie el servidor

 5. Apague el servidor

4. Cómo presentar Nacos Discovery Starter

5. Inicie una solicitud de proveedor

1 configuración pom.xml. Una configuración completa de pom.xml se ve así:

2 configuración de aplicaciones.propiedades.

3 Inicie el ejemplo de Proveedor. Como sigue:

4 Punto final del servicio

5 Inicie una aplicación de consumidor

6. Más información sobre elementos de configuración sobre Nacos Starter


1. Las características clave de Nacos incluyen:

  • Descubrimiento de servicios y monitoreo del estado del servicio.

Nacos admite el descubrimiento de servicios basado en DNS y RPC. El proveedor de servicios utilizaSDK nativo, OpenAPI o un >Servicios de búsqueda y descubrimiento. HTTP&API o DNS TODODespués de registrar el Servicio, el consumidor del servicio puede usar Agente independiente TODO

Nacos proporciona controles de estado de los servicios en tiempo real y evita solicitudes de hosts o instancias de servicios en mal estado. Nacos admite controles de estado en la capa de transporte (PING o TCP) y en la capa de aplicación (como HTTP, MySQL, definido por el usuario). Para la verificación del estado de los servicios en entornos de nube complejos y entornos de topología de red (como VPC, redes perimetrales, etc.), Nacos proporciona dos modos de verificación del estado: modo de informe del agente y detección activa del lado del servidor. Nacos también proporciona un panel de control de estado unificado para ayudarlo a administrar la disponibilidad del servicio y el tráfico según el estado de salud.

  • 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.

La gestión centralizada de la configuración facilita la implementación de servicios sin estado y la expansión elástica de los servicios bajo demanda.

Nacos proporciona una interfaz de usuario simple y fácil de usar (Demostración de muestra de consola) para ayudarlo a administrar la configuración de todos los servicios y aplicaciones. . Nacos también proporciona una serie de funciones de administración de configuración listas para usar que incluyen seguimiento de la versión de la configuración, liberación canary, reversión de la configuración con un solo clic y seguimiento del estado de actualización de la configuración del cliente para ayudarlo a administrar las configuraciones en un entorno de producción de manera más segura. y reducir el riesgo asociado con los cambios de configuración.

  • 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 la intranet del centro de datos. Los servicios DNS dinámicos también facilitan la implementación del descubrimiento de servicios basado en el protocolo DNS, lo que le ayuda a eliminar el riesgo de acoplamiento a API de descubrimiento de servicios propiedad del proveedor.

Nacos proporciona algunasAPI de DNS TODO sencillas para ayudarle a administrar los nombres de dominio asociados y las listas de servicios IP:PORT disponibles.

  • Servicios y su gestión de metadatos.

Nacos le permite administrar todos los servicios y metadatos en el centro de datos desde la perspectiva de la construcción de la plataforma de microservicios, incluidas descripciones de servicios de administración, ciclos de vida, análisis de dependencia estática de los servicios, estado de salud del servicio, administración del tráfico del servicio, políticas de enrutamiento y seguridad, SLA del servicio. y las métricas estadísticas más importantes.

2. Introducción a la arquitectura lógica y sus componentes.

  • Gestión de servicios: implemente el servicio CRUD, el nombre de dominio CRUD, la verificación del estado del servicio, la gestión del peso del servicio y otras funciones.

  • Gestión de configuración: realice gestión de configuración CRUD, gestión de versiones, gestión de escala de grises, gestión de monitoreo, seguimiento de inserción, datos agregados y otras funciones

  • Gestión de metadatos: proporciona metadatos CURD y capacidades de marcado

  • Mecanismo de complemento: realice la capacidad de separar y combinar tres módulos, y realice el mecanismo SPI del punto de extensión

  • Mecanismo de eventos: implementar notificación de eventos asincrónica, notificación asincrónica de cambio de datos del SDK y otra lógica

  • Módulo de registro: administre la clasificación de registros, nivel de registro, portabilidad de registros (especialmente para evitar conflictos), formato de registro, código de excepción + documentación de ayuda

  • Mecanismo de devolución de llamada: el SDK notifica los datos y vuelve a llamar al procesamiento del usuario a través de un modo unificado. Las interfaces y las estructuras de datos deben ser extensibles

  • Modo de direccionamiento: resuelva múltiples modos de direccionamiento, como IP, nombre de dominio, servidor de nombres, transmisión, etc., que deben ser escalables.

  • Canal de inserción: resuelva problemas de rendimiento de inserción entre el servidor y el almacenamiento, entre servidores y entre el servidor y el SDK

  • Gestión de capacidad: administre la capacidad de cada inquilino y grupo para evitar que el almacenamiento se sobrescriba y afecte la disponibilidad del servicio.

  • Gestión del tráfico: controle la frecuencia de las solicitudes, la cantidad de enlaces largos, el tamaño de los paquetes y el control del flujo de solicitudes según múltiples dimensiones, como inquilinos y grupos.

  • Mecanismo de almacenamiento en caché: directorio de recuperación ante desastres, caché local, mecanismo de caché del servidor. Se requieren herramientas para utilizar el directorio de recuperación ante desastres

  • Modo de inicio: inicie diferentes programas + UI según el modo independiente, el modo de configuración, el modo de servicio, el modo DNS o todos los modos.

  • Protocolo de coherencia: resuelve diferentes datos, diferentes requisitos de coherencia y diferentes mecanismos de coherencia

  • Módulo de almacenamiento: resuelva la persistencia de datos, el almacenamiento no persistente y resuelva problemas de fragmentación de datos

  • Servidor de nombres: resuelva el problema de enrutamiento desde el espacio de nombres al clusterid y resuelva el problema de mapeo entre el entorno del usuario y el entorno físico de nacos

  • CMDB: resuelva el problema del almacenamiento de metadatos, acople con sistemas cmdb de terceros y resuelva la relación entre aplicaciones, personas y recursos.

  • Métricas: exponga datos de métricas estándar para facilitar la conexión con sistemas de monitoreo de terceros.

  • Seguimiento: expone el seguimiento estándar para facilitar la conexión con el sistema SLA, el blanqueamiento de registros, el seguimiento de inserción y otras capacidades, y se puede conectar con el sistema de medición y facturación.

  • Gestión de acceso: equivalente al proceso de activación de los servicios de Alibaba Cloud y asignación de identidades, capacidades y permisos.

  • Gestión de usuarios: resuelva problemas de gestión de usuarios, inicio de sesión, sso y otros

  • Gestión de permisos: Resuelva problemas como reconocimiento de identidad, control de acceso, gestión de roles, etc.

  • Sistema de auditoría: Interfaz ampliada para facilitar la conexión con sistemas de auditoría de diferentes empresas

  • Sistema de notificación: los cambios u operaciones de datos principales se pueden comunicar fácilmente a través del sistema SMS para notificar a la persona correspondiente sobre los cambios de datos.

  • OpenAPI: expone una interfaz HTTP de estilo Rest estándar, simple y fácil de usar, conveniente para la integración en varios idiomas

  • Consola: Consola fácil de usar para gestión de servicios, gestión de configuración y otras operaciones.

  • SDK: SDK multilingüe

  • Agente: modo similar a dns-f, o integrado con mesh y otras soluciones

  • CLI: la línea de comando realiza una gestión ligera de productos, tan fácil de usar como git

3. Instalación de Nacos

El descubrimiento de servicios es uno de los componentes más críticos del sistema de arquitectura de microservicios. Es muy difícil configurar manualmente la lista de servicios de todos los proveedores de servicios para cada cliente y no favorece la expansión y contracción dinámica de los servicios. Nacos Discovery Starter puede ayudarle a registrar automáticamente servicios en el servidor de Nacos y puede detectar y actualizar dinámicamente la lista de servicios de una instancia de servicio. Además, Nacos Discovery Starter también registra cierta información de metadatos de la propia instancia de servicio (como host, puerto, URL de verificación de estado, página de inicio, etc.) en Nacos.

1. Selección de versión

 Se recomienda utilizar la versión 2.X. La versión estable recomendada actualmente es 2.1.1.

2. Preparar el ambiente

Nacos depende del entorno Java para ejecutarse. Si compila y ejecuta Nacos desde código, también necesita configurar el entorno Maven para esto. Asegúrese de instalarlo y usarlo en la siguiente versión. entorno:Maven a>

  1. Sistema operativo de 64 bits, compatible con Linux/Unix/Mac/Windows, se recomienda Linux/Unix/Mac.
  2. JDK 1.8+ de 64 bits;下载 & Ubicación.
  3. Maven 3.2.x+;Descarga y Ubicación .

3. Descargue el código fuente o el paquete de instalación.

Puede obtener Nacos a través del código fuente y el paquete de distribución.

Descargar el código fuente de Github

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

Descargue el método del paquete comprimido compilado

 unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  cd nacos/bin

4. Inicie el servidor

  • Nota: Nacos debe ejecutarse con una configuración de máquina de al menos 2C4g60g*3.

Linux/Unix/Mac

Comando de inicio (independiente representa operación en modo independiente, no en modo de clúster):

sh startup.sh -m standalone

Si está utilizando un sistema Ubuntu, o si ejecuta el script y recibe un mensaje de error [[ no se puede encontrar el símbolo, puede intentar ejecutarlo de la siguiente manera:

bash startup.sh -m standalone

ventanas

Comando de inicio (independiente representa operación en modo independiente, no en modo de clúster):

startup.cmd -m standalone

 5. Apague el servidor

Linux/Unix/Mac

sh shutdown.sh

ventanas

shutdown.cmd

4. Cómo presentar Nacos Discovery Starter

Si desea utilizar Nacos para el descubrimiento de servicios en su proyecto, utilice el iniciador con el ID de grupo com.alibaba.cloud y el ID de artefacto spring-cloud-starter-alibaba-nacos-discovery.


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

5. Inicie una solicitud de proveedor

Los siguientes pasos le muestran cómo registrar un servicio con Nacos.

1 configuración pom.xml. Una configuración completa de pom.xml se ve así:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>open.source.test</groupId>
    <artifactId>nacos-discovery-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>nacos-discovery-test</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>${spring.boot.version}</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2 configuración de aplicaciones.propiedades.

Algunas configuraciones básicas sobre Nacos también deben configurarse en application.properties (o application.yaml), como se muestra a continuación: application.properties


server.port=8081
spring.application.name=nacos-producer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
Si no desea utilizar Nacos para el registro y descubrimiento de su servicio, puede configurar spring.cloud.nacos.discovery.enabled en false.

3 Inicie el ejemplo de Proveedor. Como sigue:


@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {

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

    @RestController
    public class EchoController {
        @GetMapping(value = "/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string;
        }
    }
}

En este momento, puede ver la información del servicio registrado en la consola de Nacos.

Inicie el servicio Nacos antes de iniciar la aplicación del Proveedor. Para métodos de inicio específicos, consulte Sitio web oficial de Nacos .

4 Punto final del servicio

spring-cloud-starter-alibaba-nacos-discovery proporciona un EndPoint durante la implementación y la dirección de acceso del EndPoint es http://ip:port/actuator/nacos-discovery. La información de EndPoint proporciona principalmente dos categorías:

1. suscribirse: muestra qué suscriptores de servicios están disponibles actualmente

2. NacosDiscoveryProperties: muestra la configuración básica de Nacos para la instancia de servicio actual.

La información para que una instancia de servicio acceda a EndPoint es la siguiente:


{
  "subscribe": [
    {
      "jsonFromServer": "",
      "name": "nacos-provider",
      "clusters": "",
      "cacheMillis": 10000,
      "hosts": [
        {
          "instanceId": "30.5.124.156#8081#DEFAULT#nacos-provider",
          "ip": "30.5.124.156",
          "port": 8081,
          "weight": 1.0,
          "healthy": true,
          "enabled": true,
          "cluster": {
            "serviceName": null,
            "name": null,
            "healthChecker": {
              "type": "TCP"
            },
            "defaultPort": 80,
            "defaultCheckPort": 80,
            "useIPPort4Check": true,
            "metadata": {

            }
          },
          "service": null,
          "metadata": {

          }
        }
      ],
      "lastRefTime": 1541755293119,
      "checksum": "e5a699c9201f5328241c178e804657e11541755293119",
      "allIPs": false,
      "key": "nacos-producer",
      "valid": true
    }
  ],
  "NacosDiscoveryProperties": {
    "serverAddr": "127.0.0.1:8848",
    "endpoint": "",
    "namespace": "",
    "logName": "",
    "service": "nacos-provider",
    "weight": 1.0,
    "clusterName": "DEFAULT",
    "metadata": {

    },
    "registerEnabled": true,
    "ip": "30.5.124.201",
    "networkInterface": "",
    "port": 8082,
    "secure": false,
    "accessKey": "",
    "secretKey": ""
  }
}

5 Inicie una aplicación de consumidor

Es posible que una solicitud de Consumidor no sea tan simple como iniciar una solicitud de Proveedor. Porque el lado del Consumidor necesita llamar al servicio REST proporcionado por el lado del Proveedor. En el ejemplo, utilizamos el método más primitivo, que consiste en utilizar explícitamente LoadBalanceClient y RestTemolate para acceder a él. Para la configuración de pom.xml y application.properties, consulte 1.2 Resumen. El código de muestra para iniciar una aplicación de consumidor es el siguiente:


@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp {

    @RestController
    public class NacosController{

        @Autowired
        private LoadBalancerClient loadBalancerClient;
        @Autowired
        private RestTemplate restTemplate;

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

        @GetMapping("/echo/app-name")
        public String echoAppName(){
            //使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问
            ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
            String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
            System.out.println("request url:"+url);
            return restTemplate.getForObject(url,String.class);
        }

    }

    //实例化 RestTemplate 实例
    @Bean
    public RestTemplate restTemplate(){

        return new RestTemplate();
    }

    public static void main(String[] args) {

        SpringApplication.run(NacosConsumerApp.class,args);
    }
}

En este ejemplo, inyectamos una instancia de LoadBalancerClient, creamos manualmente una instancia de RestTemplate e inyectamos el valor de configuración de spring.application.name en la aplicación. El propósito es que al llamar al servicio proporcionado por el Proveedor, esperamos que el configurado actualmente aplicación Se muestra el nombre.

Inicie el servicio Nacos antes de iniciar la aplicación del Consumidor. Para métodos de inicio específicos, consulte Sitio web oficial de Nacos .

Después del inicio, acceda a la interfaz http://ip:port/echo/app-name proporcionada por Consumer. El puerto que comencé a probar aquí es 8082. Los resultados del acceso son los siguientes:

Dirección de acceso: http://127.0.0.1:8082/echo/app-name

Resultados de acceso: Hola Nacos Discovery nacos-consumer

6. Más información sobre elementos de configuración sobre Nacos Starter

Más elementos de configuración inicial sobre spring-cloud-starter-alibaba-nacos-discovery son los siguientes:

Elementos de configuración

Llave

valor por defecto

ilustrar

Dirección del servidor

spring.cloud.nacos.discovery.dirección-servidor

ninguno

El servidor Nacos comienza a escuchar la dirección IP y el puerto

Nombre del Servicio

servicio.de.discovery.de.spring.cloud.nacos

${spring.nombre.aplicación}

Nombra el servicio actual

Agrupación de servicios

spring.cloud.nacos.discovery.grupo

DEFAULT_GROUP

Establecer el grupo en el que se encuentra el servicio.

Pesos

spring.cloud.nacos.discovery.peso

1

El rango de valores es de 1 a 100. Cuanto mayor sea el valor, mayor será el peso.

nombre de la tarjeta de red

spring.cloud.nacos.discovery.interfaz de red

ninguno

Cuando la IP no está configurada, la IP registrada es la dirección IP correspondiente a la tarjeta de red, si este elemento no está configurado, se toma por defecto la dirección de la primera tarjeta de red.

Dirección IP registrada

primavera.nube.nacos.discovery.ip

ninguno

más alta prioridad

Puerto registrado

spring.cloud.nacos.discovery.port

-1

De forma predeterminada, no se requiere configuración y se detectará automáticamente.

Espacios de nombres

spring.cloud.nacos.discovery.espacio de nombres

ninguno

Uno de los escenarios comunes es la diferenciación y aislamiento de registros en diferentes entornos, como el aislamiento de recursos (como configuraciones y servicios) entre entornos de desarrollo y prueba y entornos de producción.

Llave de acceso

spring.cloud.nacos.discovery.clave de acceso

ninguno

Al ir a Alibaba Cloud, un nombre de cuenta en la nube en Alibaba Cloud

Llave secreta

spring.cloud.nacos.discovery.clave-secreta

ninguno

Al ir a Alibaba Cloud, una contraseña de cuenta en la nube en Alibaba Cloud

Metadatos

spring.cloud.nacos.discovery.metadatos

ninguno

Al utilizar la configuración del formato de mapa, los usuarios pueden personalizar cierta información de metadatos relacionados con el servicio según sus propias necesidades.

Nombre del archivo de registro

spring.cloud.nacos.discovery.nombre-registro

ninguno

grupo

spring.cloud.nacos.discovery.nombre-clúster

POR DEFECTO

Configúrelo como nombre del clúster Nacos

Punto de acceso

spring.cloud.nacos.discovery.enpoint

UTF-8

El nombre de dominio de entrada de un determinado servicio en la región. La dirección del servidor se puede obtener dinámicamente a través de este nombre de dominio.

Ya sea para integrar Ribbon

cinta.nacos.enabled

verdadero

Generalmente, se puede establecer en verdadero.

Ya sea para activar Nacos Watch

spring.cloud.nacos.discovery.watch.enabled

verdadero

Se puede configurar en falso para apagar el reloj.

Tipo de dirección IP registrada

spring.cloud.nacos.discovery.ip-tipo

IPv4

Se pueden configurar tanto los tipos IPv4 como IPv6

Resultados:Descubrimiento de Nacos · alibaba/spring-cloud-alibaba Wiki · GitHub

Supongo que te gusta

Origin blog.csdn.net/leesinbad/article/details/128584493
Recomendado
Clasificación