API Gateway - VidoniJorge/gs-spring-cloud-netflix GitHub Wiki
Una de las formas de implementar el patron API Gateway es utilizando la libreria de Zuul. Para más información al respecto: Api Gateway
Group: org.springframework.cloud ; artifact: spring-cloud-starter-netflix-zuul
Pasos requeridos para implementar un API Gateway con Zuul:
- Configurar dependencias de librerías
- Configurar la clase Application.
- Configurar properties
Para configurar las dependencias solo tenemos que agregar en nuestro archivo pom.xml las dependencias especificadas anteriormente.
Maven
<dependencies> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> </dependencies>
Se debe agregar la annotation @EnableZuulProxy en la clase SpringBootApplication para habilitar el uso de Zuul como proxy.
Ejemplo:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public class WebshopApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(WebshopApiGatewayApplication.class); } }
En el application.yml es necesario agregar la configuración necesaria que indique el ruteo a ejecutar para las entradas recibidas por el api gateway. Ejemplo de ruteo:
zuul: routes: foos: path: /foos/** url: http://localhost:8081/spring-zuul-foos-resource/foos
Indica que para el path de entrada /foos/** se ruteara a la url especificada: http://localhost:8081/spring-zuul-foos-resource/foos
Para evitar la modificación constante de la configuración y dado que la definición de las ruteas suele darse de forma dinamica debido a las tecnologias de despliegue en la nube es necesario definir una forma de obtener las direcciones de los servicios de forma dinamica. Por esta razón se implementa zuul integrado con Eureka.
Pasos requeridos para implementar un cliente Eureka en Zuul:
- Modificar la clase Application
- Modificar properties.yml
Se debe agregar la annotation @EnableEurekaCliente en la clase SpringBootApplication para habilitar el la integración con Eureka.
Ejemplo:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy @EnableEurekaClient public class WebshopApiGatewayApplication { public static void main(String[] args) { SpringApplication.run(WebshopApiGatewayApplication.class); } }
En el application.yml es necesario agregar la configuración necesaria que indique el ruteo a ejecutar para las entradas recibidas por el api gateway en función de lo registrado en Eureka y además registramos el gateway en Eureka.
Ejemplo de configuración: Se genera la entrada de eureka, haciendo hincanpie en la definición de la url de eureka en el campo defaultZone. Para las rutas disponibles, en vez de indicar la url, se indica el serviceId con el que se encuentra registrado en Eureka.
eureka: instance: preferIpAddress: true client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: ${EUREKA_URI:http://localhost:8081/eureka} zuul: sensitiveHeaders: routes: oauth: path: /oauth/** serviceId: iShopOAuth2Service