Caso de construcción del centro de configuración y descubrimiento de Nacos-Service

Tabla de contenido

1. Descubrimiento de servicios

1.1 Características de los microservicios

1.2 Caso de descubrimiento de servicios

1.2.1 Resumen

1.2.2 Construir el servicio nacos

1.2.3 Crear proyecto

1.2.4 Iniciar acceso

2. Centro de configuración

2.1 Resumen

2.2 Características de configuración

2.3 ventajas de ncaos

2.4 Modelo de gestión de la configuración 

2.5 Caso del Centro de configuración

2.5.1 Crear un espacio de nombres

2.5.2 Agregar dependencia pom al proyecto nacos-consumer

2.5.3 Configure lo siguiente en el archivo bootstrap.yml (debe ser el archivo bootstrap.yml, no el archivo application.yml):

2.5.4 Estructura del proyecto

2.5.5 Escriba un RestController, agregue @RefreshScope al controlador para implementar la carga en caliente de la configuración. el código se muestra a continuación:

2.5.6 Prueba

2.5.7 Expansión del centro de configuración


1. Descubrimiento de servicios

1.1 Características de los microservicios

  1. La capa de servicio se divide en microservicios por empresa.
  2. Las responsabilidades de los microservicios son únicas.
  3. Los protocolos livianos como RESTful y RPC se utilizan para la transmisión entre microservicios.
  4. Favorece el uso de una arquitectura de separación de front-end y back-end.

1.2 Caso de descubrimiento de servicios

1.2.1 Resumen


  En la arquitectura de microservicios, todo el sistema se divide en múltiples servicios de acuerdo con sus responsabilidades y capacidades, y los objetivos comerciales se logran mediante la colaboración entre servicios. De esta manera, es inevitable realizar llamadas remotas entre servicios en nuestro código. El consumidor del servicio debe llamar al productor del servicio. Para completar una solicitud, el consumidor debe conocer la ubicación de la red (dirección IP y número de puerto) del productor del servicio.
  Nuestro código puede leer la ubicación de red del productor de servicios leyendo el archivo de configuración, de la siguiente manera:

1.2.2 Construir el servicio nacos

Construcción del clúster de Nacos

1.2.3 Crear proyecto

Proyecto principal pom, xml


    <modules>
        <module>nacos-provider</module>
        <module>nacos-consumer</module>
    </modules>
    <name>nacos</name>
    <description>Demo project for Spring Boot</description>
    <packaging>pom</packaging>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

proveedor de nacos pom.xml


    <name>nacos-provider</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

nacos-consumer pom.xml igual que arriba

application.yml ambos son iguales, modifique el nombre del servicio appicatiion.name y el puerto del proyecto server.port

server:
  port: 56020
spring:
  application:
    name: nacos-rest-consumer
  cloud:
    nacos:
      discovery:
        server-addr: nacosIp:nacosPort # 默认端口8848

Controlador del consumidor de servicios

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.net.URI;

/**
 * @author yd
 * @version 1.0
 * @date 2020/9/27 11:23
 */
@RestController
public class RestConsumerController {
    /**
     * 服务id即注册中心的中的服务名
     */
    private String serviceId = "nacos-provider";
    @Autowired
    LoadBalancerClient loadBalancerClient;

    @GetMapping(value = "/service")
    public String service() {
        RestTemplate restTemplate = new RestTemplate();
        ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);
        URI uri = serviceInstance.getUri();
        String forObject = restTemplate.getForObject(uri+"/service", String.class);
        return "consumerinvoke" + forObject;
    }
}
RestProviderController


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author yd
 * @version 1.0
 * @date 2020/9/27 11:16
 */
@RestController
public class RestProviderController {
    /**
     * 暴露服务
     * @return
     */
    @GetMapping(value = "/service")
    public String service() {
        System.out.println("provider invoke");
        return "provider invoke";
    }
}

1.2.4 Iniciar acceso

2. Centro de configuración

2.1 Resumen

Las aplicaciones a menudo necesitan leer cierta información de configuración al iniciarse y ejecutarse. La configuración básicamente acompaña a todo el ciclo de vida de la aplicación, como: parámetros de conexión a la base de datos, parámetros de inicio, etc.

En la arquitectura de microservicio, cuando el sistema se divide de una sola aplicación en nodos de servicio en un sistema distribuido, los archivos de configuración también se deben migrar (dividir), de modo que la configuración se dispersa, no solo eso, sino que también incluye Redundancia

2.2 Características de configuración

  • Los elementos de configuración son fáciles de leer y modificar
  • Capacidad de gestión de la configuración de la aplicación en un entorno distribuido, es decir, la capacidad de gestionar la configuración de forma remota 
  • Puede ver el historial de modificación de la configuración 
  • Aislamiento de la configuración de la aplicación en diferentes entornos de implementación 

2.3 ventajas de ncaos

  1. Alto rendimiento de lectura y escritura
  2. Interfaz de gestión de operación y mantenimiento propia
  3. Código abierto de Alibaba

2.4 Modelo de gestión de la configuración 

Para la gestión de la configuración de Nacos, un conjunto de configuración se puede ubicar a través del espacio de nombres, el grupo y el ID de datos.

  • Espacio de nombres: representa diferentes entornos, como entornos de desarrollo, pruebas y producción.
  • Grupo: representa un proyecto, como XX proyecto médico, XX proyecto de comercio electrónico
  • DataId: a menudo hay varios proyectos en cada proyecto, y cada conjunto de configuración (DataId) es el archivo de configuración principal de un proyecto

2.5 Caso del Centro de configuración

2.5.1 Crear un espacio de nombres

Espacio de nombres -> Nuevo espacio de nombres

Nueva configuracion

Ejemplo

common:
    name: bushuangli--热加载
server:
  port: 8089

2.5.2 Agregar dependencia pom al proyecto nacos-consumer

        <!--配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.5.3 Configure lo siguiente en el archivo bootstrap.yml (debe ser el archivo bootstrap.yml, no el archivo application.yml):

spring:
  cloud:
    nacos:
      discovery:
        server-addr: nacosip:nacosport
        cluster-name: DEFAULT # 默认集群,可不填写
      config:
        file-extension: yaml #nacos选的配置格式
        group: DEFAULT_GROUP # nacosgroup
        namespace: 8ee806e0-6fa8-4842-a051-6f55df4972bc # nacos命名空间
        server-addr: nacosip:nacosport
        cluster-name: DEFAULT # 默认集群,可不填写
        prefix: nacos-rest-consumer #prefix 默认为 spring.application.name 的值

2.5.4 Estructura del proyecto

2.5.5 Escriba un RestController, agregue @RefreshScope al controlador para implementar la carga en caliente de la configuración. el código se muestra a continuación:


/**
 * RefreshScope 配置热加载
 * @author BSL
 */
@RestController
@RefreshScope
public class RestConsumerController {
    /**
     * 服务id即注册中心的中的服务名
     */
    private String serviceId = "nacos-provider";

    @Value("${common.name}")
    private String common_name;
    @GetMapping(value = "/configs")
    public String getvalue(){
        return common_name;
    }
     @Autowired
    private ConfigurableApplicationContext applicationContext;
    @GetMapping(value = "/configs2")
    public String getvalue2(){
        String common_name = applicationContext.getEnvironment().getProperty("common.name");
        return common_name;
    }
   @Autowired
   LoadBalancerClient loadBalancerClient;

    @GetMapping(value = "/service")
    public String service() {
        RestTemplate restTemplate = new RestTemplate();
        ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);
        URI uri = serviceInstance.getUri();
        String forObject = restTemplate.getForObject(uri+"/service", String.class);
        return "consumerinvoke" + forObject;
    }
}

2.5.6 Prueba

Inicie el proyecto nacos-consumer, visite localhost: 8089 / configs en el navegador, puede volver al common.name configurado en la consola de nacos. Cambie la configuración de common.name en la página web de nacos, vuelva a visitar localhost: 8089 / configs sin reiniciar el proyecto nacos-provider y devuelva el valor modificado Se puede ver que nacos ha implementado la función de recarga en caliente como centro de configuración.

2.5.7 Expansión del centro de configuración

Cuando se usa Spring Cloud con Nacos Config como centro de configuración, Nacos admite la administración de la configuración de múltiples entornos, generalmente a través de espacios de nombres, como

public, dev, y si usa el mismo centro de configuración para tener múltiples grupos de proyectos o equipos o diferentes módulos para la administración, generalmente usa Group para distinguir los detalles de configuración relacionados con Nacos Config, que se presentan en la documentación oficial, y puede leerlo Comprender, https://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Nacos-config

Si desea admitir el uso de varios archivos de configuración, bootstrap.yml debe usar ext-config

Crea una nueva configuración

bootstrap.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: nacosip:nacosport
        cluster-name: DEFAULT # 默认集群,可不填写
      config:
        server-addr: nacosip:nacosport
        cluster-name: DEFAULT # 默认集群,可不填写
        prefix: nacos-rest-consumer #prefix 默认为 spring.application.name 的值
        file-extension: yaml #file-exetension 为配置内容的数据格式
        namespace: 8ee806e0-6fa8-4842-a051-6f55df4972bc # nacose 命名空间id
        ext-config:
          - data-id: nacos-rest-consumer.yaml
            group: DEFAULT_GROUP
          - data-id: nacos-consumer-data-source.yaml # Nacos上配置集的ID,这里要注意的是这个        data-id一定要有后缀名
            group: MYSQL # 自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP
            refresh: true # 控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是false,代表启动时获取一次


En el caso anterior, se configuran dos conjuntos de configuración extendidos para ser asignados a los grupos DEFAULT_GROUP y MYSQL respectivamente. El nacos-rest-consumer.yaml no se actualiza en tiempo real. Aquí, la prioridad de nacos-consumer-data-source.yaml es mayor que nacos-rest-consumer. yaml, debido a que el orden de tamaño de prioridad es extension-configs [n], cuanto mayor es la n, mayor es la prioridad, más prioridad es el valor de configuración del conjunto de configuración

  • data-id: el ID de la configuración establecida en Nacos. Cabe señalar que este data-id debe tener un nombre de sufijo
  • grupo: el grupo donde se encuentra el ID de datos personalizado, si no está configurado explícitamente, el valor predeterminado es DEFAULT_GROUP
  • refrescar: controle si el ID de datos admite la actualización dinámica en la aplicación cuando cambia la configuración y se detecta el último valor de configuración. El valor predeterminado es falso, lo que significa obtener una vez al inicio

controlador

 @Value("${datasource2.root}")
    private String root;
    @GetMapping(value = "/configs3")
    public String getvalue3(){
        return root;
    }

 

Supongo que te gusta

Origin blog.csdn.net/adminBfl/article/details/108816554
Recomendado
Clasificación