Generación de una puerta de enlace de Spring Cloud Gateway

Completado

En este módulo, generaremos una puerta de enlace de Spring Cloud Gateway y la implementaremos en Azure Spring Apps.

Las puertas de enlace se usan para enrutar el tráfico HTTP público a los microservicios:

  • Controlan la lógica de enrutamiento.
  • Protegen el acceso a los microservicios, que no estarán disponibles públicamente.
  • También pueden tener funcionalidades de calidad de servicio (QoS), como la limitación de velocidad de HTTP.

Creación de una puerta de enlace de Spring Cloud Gateway

Para crear la puerta de enlace, usamos https://start.spring.io con la línea de comandos:

curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=cloud-gateway,cloud-eureka,cloud-config-client -d baseDir=todo-gateway -d bootVersion=3.1.5.RELEASE -d javaVersion=17 | tar -xzvf -

Nota:

Usamos los componentes Cloud Gateway, Eureka Discovery Client y Config Client.

Configuración de la aplicación

El archivo de configuración src/main/resources/application.properties, agregue la propiedad siguiente:

spring.main.allow-bean-definition-overriding=true
spring.cloud.gateway.discovery.locator.enabled=true
  • La parte spring.main.allow-bean-definition-overriding=true consiste en configurar la puerta de enlace de Spring Cloud Gateway para usar el bean del servidor de detección de Spring Cloud configurado en la biblioteca cliente de Azure Spring Apps.
  • La sección spring.cloud.gateway.discovery.locator.enabled=true está diseñada para configurar la puerta de enlace de Spring Cloud Gateway de modo que use el Registro del servicio de Spring Cloud para detectar los microservicios disponibles.

Creación de la aplicación en Azure Spring Apps

Como en el módulo anterior, cree una aplicación todo-gateway específica en la instancia de Azure Spring Apps. Dado que esta aplicación es una puerta de enlace, agregaremos la marca --assign-endpoint para que se exponga públicamente.

az spring app create --name todo-gateway --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --runtime-version Java_17 --assign-endpoint

Implementación de la aplicación

Ahora puede compilar el proyecto todo-gateway y enviarlo a Azure Spring Apps:

cd todo-gateway
./mvnw clean package -DskipTests
az spring app deploy --name todo-gateway --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --artifact-path target/demo-0.0.1-SNAPSHOT.jar
cd ..

Prueba del proyecto en la nube

  1. Vaya a Aplicaciones en la instancia de Azure Spring Apps.

    1. Compruebe que todo-gateway tenga un estado de registro que indique 1/1. Esta información muestra que se ha registrado correctamente en el Registro del servicio de Spring Cloud.
    2. Seleccione todo-gateway para obtener más información sobre el microservicio.
  2. Copie o pegue la dirección URL pública proporcionada. Conserve esta dirección URL a mano para las secciones siguientes.

    Hay un punto de conexión de prueba, como para microservicios, pero la puerta de enlace se expone directamente en Internet, por lo que usaremos la dirección URL pública.

Como la puerta de enlace está conectada al Registro del servicio de Spring Cloud, debería abrir automáticamente rutas a los microservicios disponibles, con rutas de acceso URL en el formato /MICROSERVICE-ID/**: [El identificador de MICROSERVICE debe estar en mayúsculas]

Pruebe el punto de conexión de microservicio todo-service mediante curl https://XXXXXXXX-todo-gateway.azuremicroservices.io/TODO-SERVICE/ (reemplace XXXXXXXX por el nombre de la instancia de Azure Spring Apps).

Como en el módulo anterior, el resultado de este comando debe incluir los tres elementos que se han insertado inicialmente en la base de datos MySQL:

[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]