Compartir tecnología

Notas prácticas de Grain Mall-27-Componentes distribuidos-SpringCloud-Gateway-Creación

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

El contenido principal de esta sección es crear el módulo de puerta de enlace, registrar la puerta de enlace en Nacos y configurar el enrutamiento para pruebas.

1. Cree un módulo de puerta de enlace

Haga clic derecho en el proyecto.New->Module, crea un nuevo módulo, nombre del módulo gulimall-gateway

Insertar descripción de la imagen aquí

Complete información diversa.

Insertar descripción de la imagen aquí

Seleccione Dependencia de puerta de enlace.

Insertar descripción de la imagen aquí
Haga clic en Crear para crear el módulo.

2. Configuración del servicio de puerta de enlace

1. Depende del módulo común

		<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

Debido a que el servicio de puerta de enlace también necesita utilizar el centro de registro y el centro de configuración, requiere dependencias de paquetes relacionados, que se obtienen confiando en el módulo común.

2. Iniciar el descubrimiento de servicios

Al agregar anotaciones a la clase de inicio, el servicio se puede registrar en el centro de registro después del inicio.

@EnableDiscoveryClient
  • 1

3. Crear archivo de configuración

Cree tres nuevos archivos de configuración en el directorio de recursos.

① propiedades de la aplicación

Configure la información relacionada con el centro de registro de Nacos.

server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
  • 1
  • 2
  • 3

② propiedades de bootstrap

Configure la información relevante del centro de configuración de Nacos. Tenga en cuenta que se debe crear un espacio de nombres llamado puerta de enlace en Nacos de antemano. Todos los archivos de configuración del módulo de puerta de enlace se almacenan en este espacio de nombres.

Insertar descripción de la imagen aquí

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
  • 1
  • 2
  • 3

③ aplicación.yml

En este archivo, escriba la configuración de enrutamiento de la puerta de enlace. Consulte la siguiente sección para obtener más detalles.

3. Configuración de enrutamiento de puerta de enlace

1. Configuración de enrutamiento

En esta parte, tomamos dos requisitos reales como ejemplos para practicar cómo configurar la puerta de enlace.

La función de la puerta de enlace es reenviar las solicitudes recibidas a los servicios correspondientes de acuerdo con las reglas configuradas por la puerta de enlace.

Para facilitar la demostración, suponiendo que exista tal demanda, cuando se ingrese la siguiente URL en el navegador, la solicitud se reenviará a Baidu.

http://localhost/?url=baidu
  • 1

Cuando se ingresa la siguiente URL en el navegador, la solicitud se reenviará a Tencent.

http://localhost/?url=qq
  • 1

¿Cómo escribir un archivo de configuración?

Puerta de enlace de Spring Cloud de almacénDocumentación oficial, consulte su formato.

Debido a que necesitamos realizar el reenvío correspondiente según las condiciones de consulta en la URL, encontramos el documento de configuración de aserción de Gateway sobre Consulta.

Insertar descripción de la imagen aquí

Consulte este documento para la configuración.

aplicación.yml

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_test
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_test
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Aquí se definen dos reglas de enrutamiento para usar parámetros de consulta.urlEl valor determina el URI de destino al que se debe reenviar la solicitud.

  • spring.cloud.gateway.routes: Esta es la lista de configuración de enrutamiento de Spring Cloud Gateway.

  • cadaroutesEl elemento define una regla de enrutamiento.

  • id: cada regla de enrutamiento requiere una identificación única para identificar y administrar rutas.

  • uri : Cuando la regla de enrutamiento coincida, la solicitud se reenviará a esta dirección URI.aquíhttps://www.baidu.comyhttps://www.qq.comLas URL de los sitios web de Baidu y Tencent se especifican respectivamente.

  • predicates : Esta es la lista de aserciones de la regla de enrutamiento que se utiliza para determinar si se debe aplicar esta regla de enrutamiento. Las aserciones son expresiones que se evalúan en función de los metadatos de la solicitud.

    • Query=url,baidu: Esta afirmación indica que si la solicitud contiene unurlparámetro de consulta, y su valor es igual abaidu, entonces esta regla de enrutamiento se activará y la solicitud se reenviará ahttps://www.baidu.com

    • Query=url,qq: De manera similar, si el parámetro de consultaurlEl valor esqq, la solicitud será enviada ahttps://www.qq.com

De esta manera, cuando su aplicación reciba un mensaje conurl=baiduourl=qqAl solicitar parámetros de consulta, Spring Cloud Gateway enviará la solicitud al sitio web correspondiente de acuerdo con las reglas anteriores.

2. Verificación

Visite la siguiente dirección en su navegador.

http://localhost/?url=baidu
  • 1

Insertar descripción de la imagen aquí

Si tiene la interfaz anterior, significa que la configuración del servicio de puerta de enlace y la configuración de enrutamiento son normales.

registro de errores

Se informará un error durante el inicio de Gateway.

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Insertar descripción de la imagen aquí

La razón es que el módulo Gateway depende de común, y el módulo común declara su dependencia de mybatis. El paquete mybatis buscará configuraciones relacionadas con la base de datos al inicio y el proyecto Gateway no requiere una base de datos, por lo que no hay ninguna configuración relevante. .

La solución es decirle al módulo de puerta de enlace que no es necesario buscar configuraciones relacionadas con la base de datos al inicio y que puede excluir dependencias de paquetes relevantes declarándolas en la anotación de clase de inicio.

Insertar descripción de la imagen aquí

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1