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
- Agregar dependencia al archivo pom.xml:
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
- Habilitar la piscina de conexiones en el archivo YAML:
feign:
okhttp:
enabled: true
- 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
- Crear un módulo de microservicio de gateway.
- 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>
- Crear la clase de inicio:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
- 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.
- Agregar dependencias necesarias:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- Crear un archivo
bootstrap.yamlcon 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);
}
});