Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] SWAGGER

Aproveitei o módulo e tentei implementar um Swagger na aplicação, também usei Docker, o repositorio completo esta disponivel em:

https://github.com/WellysonP/microservice-lsim

Para rodar a aplicação:

git clone https://github.com/WellysonP/microservice-lsim.git
git submodule init
git submodule update
cd microservice-lsim
docker compose up

Minha idéia foi aplicar o Swagger no serviço de Gateway, já que ele é a porta de entrada dos microserviços. Coloquei para rodar em http://localhost:8762/docs/swagger Com o print abaixo vemos que o Swagger iniciou, consegiu ler os Schemas e endpoints.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeContudo, ao usar algum endpoint, percebi que ele reclamou de CORS e fui ajustar o CORS, e nada dos endpoints rodarem. Analisando mais a fundo, vi que o curl que o endpoint esta batendo é dado por:

curl -X 'GET' \
  'http://1dbd06adb296:35089/pagamentos?page=0&size=1&sort=string' \
  -H 'accept: */*'

Podemos ver ai que o Swagger esta batendo diretamente no container da aplicação (nesse casa a aplicação de pagamentos) e na porta dinâmica, por ser uma porta dinâmica, ela não foi liberada... Achei estranho, pois foi implementado justamente na camada de Gateway.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeSei que Swagger não esta no escopo da disciplina, mas alguém poderia me ajudar a fazer o Swagger apontar para a porta do gateway?

1 resposta
solução!

Usei isso no gateway para resolver:

spring.application.name=gateway-lsim

eureka.client.serviceUrl.defaultZone=${EUREKA_SERVER_URL:http://localhost:8761/eureka}
server.port=8762
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lowerCaseServiceId=true

# Swagger UI Custom Path
springdoc.swagger-ui.path=/docs/swagger
springdoc.swagger-ui.enabled=true
springdoc.api-docs.enabled=true
springdoc.swagger-ui.config-url=/v3/api-docs/swagger-config

# Configure os endpoints do Swagger para apontarem para o Gateway
springdoc.swagger-ui.urls[0].url=/pagamentos/v3/api-docs
springdoc.swagger-ui.urls[0].name=Pagamentos Service
springdoc.swagger-ui.urls[1].url=/pedidos/v3/api-docs
springdoc.swagger-ui.urls[1].name=Pedidos Service

# Rotas do Gateway para microserviços
spring.cloud.gateway.routes[0].id=pagamentos-service
spring.cloud.gateway.routes[0].uri=lb://pagamentos-lsim
spring.cloud.gateway.routes[0].predicates[0]=Path=/pagamentos/**

spring.cloud.gateway.routes[1].id=pedidos-service
spring.cloud.gateway.routes[1].uri=lb://pedidos-lsim
spring.cloud.gateway.routes[1].predicates[0]=Path=/pedidos/**

# Rotas para documentação do Swagger
spring.cloud.gateway.routes[2].id=pagamentos-docs
spring.cloud.gateway.routes[2].uri=lb://pagamentos-lsim
spring.cloud.gateway.routes[2].predicates[0]=Path=/pagamentos/v3/api-docs

spring.cloud.gateway.routes[3].id=pedidos-docs
spring.cloud.gateway.routes[3].uri=lb://pedidos-lsim
spring.cloud.gateway.routes[3].predicates[0]=Path=/pedidos/v3/api-docs

# Desabilitar descoberta automática para evitar conflitos
spring.cloud.gateway.discovery.locator.enabled=false

# CORS Configuration
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-origin-patterns=http://localhost:[*]
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-methods=GET,POST,PUT,DELETE,OPTIONS
spring.cloud.gateway.globalcors.cors-configurations.[/**].allowed-headers=*
spring.cloud.gateway.globalcors.cors-configurations.[/**].allow-credentials=true
spring.cloud.gateway.globalcors.cors-configurations.[/**].max-age=3600