API Gateway - VidoniJorge/gs-spring-cloud-netflix GitHub Wiki

API Gateway

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

Dependencias necesarias

 Group: org.springframework.cloud ; artifact: spring-cloud-starter-netflix-zuul

Procedimiento

Pasos requeridos para implementar un API Gateway con Zuul:

  • Configurar dependencias de librerías
  • Configurar la clase Application.
  • Configurar properties

Agregar dependencias

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>

Configuración clase Application

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);
    }
   }

Configuración de properties

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

Configuración necesaria para integrar con Eureka

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.

Procedimiento

Pasos requeridos para implementar un cliente Eureka en Zuul:

  • Modificar la clase Application
  • Modificar properties.yml

Modificar la clase Application

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);
    }
   }

Configuración de properties

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 
⚠️ **GitHub.com Fallback** ⚠️