Microservice Comunication - VidoniJorge/gs-spring-cloud-netflix GitHub Wiki

Microservice Comunication

Una de las herramientas que utilizamos para comunicarnos con un microservicio expuesto como API Rest es Feign, en este ejemplo usamos OpenFeign.

Dependencias necesarias

 Group: org.springframework.cloud ; artifact: spring-cloud-starter-openfeign

Procedimiento

Pasos requeridos para implementar un cliente Feign en un servicio:

  • Configurar dependencias de librerías
  • Configurar la clase Application.
  • Generar la interfaz Feign.

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-openfeign</artifactId>
     </dependency>
</dependencies>

Configuración clase Application

Se debe agregar la annotation @EnableFeignClients en la clase SpringBootApplication para habilitar el uso de clientes Feign.

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;
import org.springframework.cloud.openfeign.EnableFeignClients;

  @SpringBootApplication
  @EnableZuulProxy
  @EnableEurekaClient
  @EnableFeignClients
  public class WebshopApiGatewayApplication {
   public static void main(String[] args) {
	  SpringApplication.run(WebshopApiGatewayApplication.class);
    }
   }

Generar interfaz Feign

Para definir el cliente Feign, es necesario generar un interfaz con los siguientes elementos. Annotation @FeignClient con un campo name que lo identifique y la url del servicio a invocar (esta puede ser configurable) aplicado a la interfaz. Generar un metodo que estara asociado a un recurso especifico de la API Rest a invocar. En el ejemplo tenemos un metodo validation que unicamente le interesa los headers a enviar. Este metodo tendra un annotation que representara el verbo HTTP a invocar, en el ejemplo es @GetMapping por lo cual invoca al metodo GET y posee la definición del path a invocar, que en este caso es sessions.

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.ResponseBody;

@FeignClient(name = "security",url = "http://localhost:9081/auth")
public interface SecurityFeign {

    @GetMapping(path = "/sessions")
    @ResponseBody
    public Object validation(@RequestHeader HttpHeaders httpHeaders);
}

Ejemplo de uso: En este ejemplo unicamente se realiza el llamado a la API Rest. El cliente es instanciado a traves de un @Autowired

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;

import ishop.apigateway.feign.SecurityFeign;
import ishop.apigateway.service.SecurityService;

@Service
public class SecurityServiceImpl implements SecurityService {

    @Autowired
    private SecurityFeign securityFeign;

    @Override
    public Object validateToken(HttpHeaders httpHeaders) {
        return securityFeign.validation(httpHeaders);
    }

}
⚠️ **GitHub.com Fallback** ⚠️