Creare un'istanza di Spring Cloud Gateway

Completato

In questo modulo si creerà un’istanza di Spring Cloud Gateway che verrà distribuita in Azure Spring Apps.

I gateway vengono usati per instradare il traffico HTTP pubblico ai microservizi:

  • Gestiscono la logica di routing.
  • Proteggono l'accesso ai microservizi, che non saranno disponibili pubblicamente.
  • Possono anche avere funzionalità legate alla qualità del servizio (QoS), ad esempio la limitazione della frequenza HTTP.

Creare un'istanza di Spring Cloud Gateway

Per creare il gateway, si usa https://start.spring.io con la riga di comando:

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

Vengono usati i componenti Cloud Gateway, Eureka Discovery Client e Config Client.

Configurazione dell'applicazione

Nel file di configurazione src/main/resources/application.properties aggiungere la proprietà seguente:

spring.main.allow-bean-definition-overriding=true
spring.cloud.gateway.discovery.locator.enabled=true
  • La parte spring.main.allow-bean-definition-overriding=true consente di configurare Spring Cloud Gateway per l'uso del bean Spring Cloud Discovery Server configurato nella libreria Azure Spring Apps Client.
  • La parte spring.cloud.gateway.discovery.locator.enabled=true consente di configurare Spring Cloud Gateway per l'uso di Spring Cloud Service Registry al fine di individuare i microservizi disponibili.

Creare l'applicazione in Azure Spring Apps

Come nel modulo precedente, creare un'applicazione todo-gateway specifica nell'istanza di Azure Spring Apps. Poiché questa applicazione è un gateway, viene aggiunto il flag --assign-endpoint in modo da esporla pubblicamente.

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

Distribuire l'applicazione

È ora possibile compilare il progetto todo-gateway e inviarlo ad 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 ..

Testare il progetto nel cloud

  1. Passare ad App nell'istanza di Azure Spring Apps.

    1. Verificare che lo stato della registrazione di todo-gateway indichi 1/1. Queste informazioni indicano che la registrazione in Spring Cloud Service Registry è avvenuta correttamente.
    2. Selezionare todo-gateway per ottenere altre informazioni sul microservizio.
  2. Copiare/incollare l'URL pubblico fornito. Tenere l'URL a portata di mano per le sezioni successive.

    Esiste un endpoint di test, come per i microservizi, ma il gateway è esposto direttamente su Internet, quindi verrà usato l'URL pubblico.

Poiché il gateway è connesso a Spring Cloud Service Registry, verranno aperte automaticamente le route ai microservizi disponibili, con percorsi URL nel formato /MICROSERVICE-ID/**, dove MICROSERVICE-ID deve essere in lettere maiuscole.

Testare l'endpoint del microservizio todo-service eseguendo: curl https://XXXXXXXX-todo-gateway.azuremicroservices.io/TODO-SERVICE/ (sostituendo XXXXXXXX con il nome dell'istanza di Azure Spring Apps).

Come nel modulo precedente, il risultato di questo comando deve essere costituito dai tre elementi inseriti inizialmente nel database MySQL:

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