Configuración Avanzada de OpenFeign y Spring Cloud Gateway

OpenFeign se utiliza para realizar llamadas a servicios remotos y generalmente se combina con el plugin de equilibrio de carga loadbalancer.

Piscinas de Conexión

En el fondo, Feign realiza solicitudes HTTP utilizando otros marcos. Las implementaciones del cliente HTTP compatibles son:

  • HttpURLConnection: Implementación predeterminada, no admite piscinas de conexión.
  • Apache HttpClient: Admite piscinas de conexión.
  • OKHttp: Admite piscinas de conexión.

Es recomendable usar un cliente que admita piscinas de conexión en lugar del cliente predeterminado.

Ejemplo con OKHttp

  1. Agregar dependencia al archivo pom.xml:
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

  1. Habilitar la piscina de conexiones en el archivo YAML:
feign:
  okhttp:
    enabled: true

  1. Reiniciar el servicio para aplicar los cambios.

Configuración de Registros de OpenFeign

Para habilitar los registros de Feign, es necesario ajustar el nivel de registro en el paquete correspondiente a DEBUG. Los niveles disponibles son:

  • NONE: No registra ninguna información (valor predeterminado).
  • BASIC: Registra solo el método, URL y estado de respuesta.
  • HEADERS: Incluye encabezados de solicitud y respuesta.
  • FULL: Registra todos los detalles, incluidos los cuerpos de solicitud y respuesta.

Definir Nivel de Registro

Crear una clase de configuración con un método @Bean:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">

Configuración de un Gateway

Un gateway puede ser utilizado para enrutar solicitudes de usuario y distribuirlas entre microserviciso.

Creación de un Gateway

  1. Crear un módulo de microservicio de gateway.
  2. Añadir dependencias necesarias:
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
</dependencies>

  1. Crear la clase de inicio:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">

  1. Configurar rutas en el archivo YAML:
server:
  port: 8080
spring:
  application:
    name: gateway-server
  cloud:
    nacos:
      server-addr: 192.168.48.100:8848
    gateway:
      routes:
        - id: servicio-items
          uri: lb://servicio-items
          predicates:
            - Path=/items/**,/search/**
          filters:
            - filtro1=xxx

Filtros Personalizados

Existen dos tipos principales de filtros:

  • GatewayFilter: Actúa sobre rutas específicas.
  • GlobalFilter: Actúa sobre todas las rutas.

Implementar GlobalFilter

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">

Gestión de Configuración

Compartir Configuración

Extraer configuraciones comunes a un archivo en Nacos permite centralizar su gestión.

  1. Agregar dependencias necesarias:
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

  1. Crear un archivo bootstrap.yaml con la configuración de Nacos:
spring:
  application:
    name: servicio-carrito
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168.48.100:8848
      config:
        file-extension: yaml
        shared-configs:
          - dataId: shared-jdbc.yaml
          - dataId: shared-log.yaml

Reinicio Dinámico

Nacos soporta actualizaciones dinámicas sin reinicio. Utilizar anotaciones como @ConfigurationProperties para cargar configuraciones actualizadas.

Ruteo Dinámico con Nacos

Configurar rutas dinámicamente en Nacos permite agregar o eliminar rutas sin interrumpir el servicio.

String informacionConfig = administradorNacos.getConfigService()
                .getConfigAndSignListener(dataId, grupo, 5000, new Listener() {
                    @Override
                    public Executor getExecutor() {
                        return null;
                    }

                    @Override
                    public void receiveConfigInfo(String informacionConfig) {
                        actualizarConfiguracion(informacionConfig);
                    }
                });

Etiquetas: SpringCloudGateway openfeign nacos

Publicado el 10-10 12:33