PasarelaPuerta de entrada y Nacos

Primeros pasos con Gateway y Nacos

1. Análisis de arquitectura

Si hay muchos más microservicios en un proyecto, habrá desventajas al solicitar los microservicios directamente desde el front-end. El front-end configura una ruta absoluta para cada dirección de solicitud, lo cual es muy desfavorable para el mantenimiento del sistema. Por ejemplo, el siguiente código Solicita la gestión del sistema. La dirección del servicio utiliza localhost.

Insertar descripción de la imagen aquí

Cuando el sistema se conecta, es necesario cambiarlo al nombre de dominio de la red pública. Si hay muchas direcciones de este tipo, será muy problemático.

En base a este problema, se puede utilizar una puerta de enlace para resolverlo, como se muestra a continuación:
Insertar descripción de la imagen aquí

Luego, según la puerta de enlace, el front-end solicita directamente la dirección del microservicio y solo necesita especificar la ruta relativa de cada interfaz.
Insertar descripción de la imagen aquí

Además, el backend también puede cambiar la dirección para acceder al microservicio a la dirección para acceder a la puerta de enlace, y luego la puerta de enlace realiza el enrutamiento.

Insertar descripción de la imagen aquí

La puerta de enlace puede enrutar solicitudes a microservicios específicos, lo que reduce el costo de conectar microservicios al mundo exterior. Además, la puerta de enlace también puede implementar funciones como control de permisos y limitación de corriente.

Luego se puede ver en la figura que la puerta de enlace está implementada.procesocomo sigue:

1. Inicie el microservicio y regístrese en Nacos. Nacos registra la dirección de cada instancia de microservicio.

2. La puerta de enlace lee la lista de servicios de Nacos, incluido el nombre del servicio, la dirección del servicio, etc.

3. La solicitud llega a la puerta de enlace y la puerta de enlace enruta la solicitud al microservicio específico.

2. Construye Nacos

Centro de descubrimiento de servicios

Para usar la puerta de enlace, primero construya Nacos. Nacos tiene dos funciones:

1. Centro de descubrimiento de servicios.

El microservicio se registra en Nacos y la puerta de enlace obtiene la lista de microservicios de Nacos.

2. Centro de configuración.

Hay muchos microservicios y su información de configuración también es muy compleja. Para brindar mantenibilidad del sistema, la información de configuración de los microservicios se unifica en la configuración de Nacos.

Antes de construir el centro de descubrimiento de servicios de Nacos, es necesario aclarar dos conceptos:espacio de nombres y grupo

Espacio de nombres: se utiliza para distinguir entornos, como entorno de desarrollo, entorno de prueba y entorno de producción.

grupo: utilizado para distinguir proyectos, como: proyecto xuecheng-plus, proyecto xuecheng2.0

Primero configure el espacio de nombres en nacos:

Después de iniciar sesión en Nacos, haga clic en "Espacio de nombres" en el menú de la izquierda para ingresar a la interfaz de administración del espacio de nombres.

Insertar descripción de la imagen aquí

Haga clic en "Nuevo espacio de nombres" y complete la información relevante del espacio de nombres. Como se muestra abajo:

Insertar descripción de la imagen aquí

Registre mensajes de microservicio en Nacos

  1. Primero agregue la gestión de dependencias
<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>  
    <version>Hoxton.SR9</version>  
    <type>pom</type>  
    <scope>import</scope>  
</dependency>
<!--Nacos服务注册依赖-->
<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   <version>2.3.7.RELEASE</version> 
</dependency>

2. Configurar la dirección de nacos

Configure la siguiente información en el archivo de configuración:


spring:  
  application:  
    name: content-api  #微服务名称
  cloud:  
    nacos:  
      server-addr: 192.168.101.65:8848  #Nacos地址
      discovery:  
        namespace: dev  #命名空间
        group: xuecheng-plus-project #组

Reinicie el servicio.

Ingrese al servicio Nacos para ver la lista de servicios y descubra que hay mensajes de microservicio registrados

Insertar descripción de la imagen aquí

Centro de configuración

Configuración tres elementos

Una vez construido el centro de descubrimiento de servicios de Nacos, se construye Nacos como centro de configuración, cuyo propósito es gestionar todas las configuraciones del proyecto a través de Nacos.

Primero clasifique los archivos de configuración en el proyecto:

1. Configuración única para cada proyecto

Esto significa que la configuración solo necesita configurarse en algunos proyectos, o la configuración tiene valores diferentes en cada proyecto.

Por ejemplo: spring.application.name debe configurarse para cada proyecto pero el valor es diferente, algunos proyectos necesitan conectarse a la base de datos pero otros no, algunos proyectos necesitan configurar la cola de mensajes pero otros no.

2. Configuración común al proyecto

Se refiere a la configuración con el mismo contenido de configuración en varios proyectos. Por ejemplo: configuración de Redis, muchos proyectos utilizan el mismo servicio de Redis, por lo que la configuración también es la misma.

Además, necesita saber cómo nacos localiza un archivo de configuración específico, a saber:espacio de nombres, grupo, ID de datos.

1. Encuentre el entorno específico y proyectos específicos a través del espacio de nombres y el grupo.

2. Encuentre el archivo de configuración específico a través de dataid.Dataid consta de tres partes.

Por ejemplo: el archivo de configuración content-service-dev.yaml consta de tres partes: (content-service)-(dev).(yaml)

servicio de contenido: la primera parte, es el nombre de la aplicación configurada en application.yaml, es decir, el valor de spring.application.name.

dev: la segunda parte, es el nombre del entorno, especificado a través de spring.profiles.active,

Yaml: la tercera parte es el sufijo del archivo de configuración. Actualmente, nacos admite propiedades, yaml y otros tipos de formato. Este proyecto elige el tipo de formato yaml.

Pasado cuando comenzamos el proyecto.perfiles.de.primavera.activosLos parámetros determinan a qué archivo de configuración del entorno se hace referencia. Por ejemplo, pasar spring.profiles.active=dev significa usar el archivo de configuración del entorno de desarrollo, que es content-service-dev.yaml.

Por ejemplo

1. Haga clic en el signo más para agregar configuración.

Insertar descripción de la imagen aquí

2. Editar configuración

Insertar descripción de la imagen aquí

3. Agregar dependencias


 <!--微服务配置依赖-->
 <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.6.RELEASE</version> 
</dependency>

Modificar la configuración en el archivo de configuración

(Ver el frente para más detalles)

YAML
spring:
  application:
    name: content-service
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true

#profiles默认为dev
  profiles:
    active: dev 

Una vez completada la configuración, ejecute el archivo de prueba unitaria del proyecto para ver si se puede probar normalmente. El método de prueba unitaria de seguimiento puede leer los datos de la base de datos normalmente, lo que indica que la información de configuración se lee normalmente desde nacos.

Configuración común

Si hay configuraciones que deben escribirse repetidamente o configuraciones públicas, ¿cómo configurar la configuración pública del proyecto en nacos?

nacos proporciona configuraciones compartidas para introducir configuraciones públicas.

Por ejemplo, si swagger está configurado en content-api, todos los proyectos de interfaz deben configurar swagger. Aquí, la configuración de swagger se puede definir como una configuración pública, que se puede importar a cualquier proyecto.

Cree la configuración pública de xuecheng-plus por separado en el grupo xuecheng-plus-common, ingrese al entorno de desarrollo de nacos y agregue la configuración pública swagger-dev.yaml

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-OSLuJRO1-1689594280792)(file:///C:/Users/a2262/Pictures /Typedown/c50152f7-1c78 -4a9a-aca4-139482cc8dc8.png)]

Luego marque la información de configuración compartida en el archivo de configuración.

YAML
spring:
  application:
    name: content-api
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true #开启自动更新配置
        extension-configs: #扩展配置,下面是扩展配置的信息(Nacos中的配置)
          - data-id: content-service-${
    
    spring.profiles.active}.yaml
            group: xuecheng-plus-project
            refresh: true
        shared-configs: #共享配置,下面是共享配置的信息
          - data-id: logging-${
    
    spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev #环境,也是后缀

Nueva configuración

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-PxnA3s17-1689594280793)(file:///C:/Users/a2262/Pictures /Typedown/67e1ad57-181d -4bfd-b5a6-0e2800fb4022.png)]

Una vez completada la configuración, reinicie el proyecto y vea si hay resultados de configuración correspondientes. Si los hay, significa que la configuración se realizó correctamente.

Configurar prioridad

El orden en que SpringBoot lee los archivos de configuración es el siguiente:

Insertar descripción de la imagen aquí

Las formas de introducir archivos de configuración son:

1. Introducir por nombre de la aplicación del proyecto

2. Introducir a través del archivo de configuración extendido

3. Introducir a través de un archivo de configuración compartido

4. Archivo de configuración local

La prioridad de cada archivo de configuración: nombre de la aplicación del proyecto archivo de configuración > archivo de configuración extendido > archivo de configuración compartido > archivo de configuración local.

Si queremos darle prioridad local, podemos configurarlo en el archivo de configuración de nacos de la siguiente manera:

#配置本地优先  
spring:  
 cloud:  
  config:  
    override-none: true

3. Construir puerta de enlace

Necesitamos crear un proyecto de puerta de enlace.

1. Cree un nuevo proyecto de puerta de enlace.

Insertar descripción de la imagen aquí

2.Estructura del proyecto

Insertar descripción de la imagen aquí

3. Agregar dependencias


<artifactId>xuecheng-plus-gateway</artifactId>

<dependencies>

    <!--网关-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>

    <!--服务发现中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>
    <!-- 排除 Spring Boot 依赖的日志包冲突 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <version>2.3.7.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Spring Boot 集成 log4j2 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
        <version>2.3.7.RELEASE</version>
    </dependency>


</dependencies>

4. Configure el archivo de configuración bootstrap.yaml de la puerta de enlace.

YAML
#微服务配置
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 192.168.101.65:8848
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        shared-configs:
          - data-id: logging-${
    
    spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true


  profiles:
    active: dev

5. Configure la política de enrutamiento de puerta de enlace en nacos:

Insertar descripción de la imagen aquí

La configuración es la siguiente.

YAML
server:
  port: 63010 # 网关端口
spring:
  cloud:
    gateway:
#      filter:
#        strip-prefix:
#          enabled: true
      routes: # 网关路由配置,这下面是我的几个微服务信息
        - id: content-api # 路由id,自定义,只要唯一即可
          # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
          uri: lb://content-api # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/content/** # 这个是按照路径匹配,只要以/content/开头就符合要求
#          filters:
#            - StripPrefix=1
        - id: system-api
          # uri: http://127.0.0.1:8081
          uri: lb://system-api
          predicates:
            - Path=/system/**
#          filters:
#            - StripPrefix=1
        - id: media-api
          # uri: http://127.0.0.1:8081
          uri: lb://media-api
          predicates:
            - Path=/media/**
#          filters:
#            - StripPrefix=1


6. Cambie la dirección que solicita el microservicio a la dirección de la puerta de enlace.

Por ejemplo

Insertar descripción de la imagen aquí

o

Insertar descripción de la imagen aquí

Inicie la prueba del proyecto. Si la solicitud es normal, la implementación es exitosa.

Supongo que te gusta

Origin blog.csdn.net/m0_71106830/article/details/131773625
Recomendado
Clasificación