¿Qué es Resilience4j y para qué sirve?
\n\nResilience4j es una biblioteca ligera para Java, diseñada para mejorar la tolerancia a fallos (resilience) de microservicios y sistemas distribuidos. Proporciona un conjunto de componentes listos para usar que ayudan a proteger su aplicación contra fallos en cascada, sobrecargas y respuestas lentas de servicios externos (bases de datos, API, colas de mensajes, etc.).
\n\nLa tarea principal de la biblioteca es implementar patrones de tolerancia a fallos, como Circuit Breaker (desconexión automática de un servicio problemático), Rate Limiter (limitación de la frecuencia de solicitudes), Retry (reintentos), Bulkhead (aislamiento de recursos), Time Limiter (limitación del tiempo de ejecución) y Cache (almacenamiento en caché de resultados).
\n\nLa biblioteca se integra perfectamente en el ecosistema Spring Boot, pero también se puede utilizar en cualquier otra aplicación Java. Resilience4j se considera el reemplazo moderno de la biblioteca obsoleta Hystrix de Netflix.
\n\nInstalación (Maven/Gradle)
\n\nResilience4j es una biblioteca de Java, por lo que se instala a través de los sistemas de compilación Maven o Gradle. A diferencia de Python, aquí no se utiliza el comando pip install.
Maven (pom.xml)
\n<dependency>\n <groupId>io.github.resilience4j</groupId>\n <artifactId>resilience4j-all</artifactId>\n <version>2.2.0</version>\n</dependency>\n\n<!-- Adicional para Spring Boot -->\n<dependency>\n <groupId>io.github.resilience4j</groupId>\n <artifactId>resilience4j-spring-boot3</artifactId>\n <version>2.2.0</version>\n</dependency>\n\nGradle (build.gradle)
\nimplementation 'io.github.resilience4j:resilience4j-all:2.2.0'\nimplementation 'io.github.resilience4j:resilience4j-spring-boot3:2.2.0'\n\nInicio rápido con un ejemplo de código
\n\nCreemos un ejemplo simple de uso de Circuit Breaker. Supongamos que tenemos un método que llama a una API externa. Queremos que si la API responde con un error 5 veces seguidas, las siguientes llamadas devuelvan inmediatamente un valor de respaldo (fallback), sin sobrecargar el servicio problemático.
\n\nimport io.github.resilience4j.circuitbreaker.CircuitBreaker;\nimport io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;\nimport io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;\nimport java.time.Duration;\nimport java.util.function.Supplier;\n\npublic class QuickStartExample {\n\n public static void main(String[] args) {\n // 1. Crear la configuración de Circuit Breaker\n CircuitBreakerConfig config = CircuitBreakerConfig.custom()\n .failureRateThreshold(50) // Umbral de errores en porcentaje\n .waitDurationInOpenState(Duration.ofMillis(1000)) // Tiempo en estado abierto\n .slidingWindowSize(5) // Tamaño de la ventana deslizante para contar errores\n .build();\n\n // 2. Crear el registro y el Circuit Breaker\n CircuitBreakerRegistry registry = CircuitBreakerRegistry.of(config);\n CircuitBreaker circuitBreaker = registry.circuitBreaker("myService");\n\n // 3. Envolver la llamada peligrosa\n Supplier<String> decoratedSupplier = CircuitBreaker\n .decorateSupplier(circuitBreaker, QuickStartExample::riskyOperation);\n\n // 4. Ejecutar varias veces\n for (int i = 0; i < 10; i++) {\n try {\n String result = decoratedSupplier.get();\n System.out.println("Éxito: " + result);\n } catch (Exception e) {\n System.out.println("Error: " + e.getMessage());\n }\n }\n }\n\n // Simulación de un servicio externo poco confiable\n public static String riskyOperation() {\n if (Math.random() > 0.3) {\n throw new RuntimeE También en la biblioteca
Cliente Elasticsearch para Java: guía completa de conexión y trabajo
golangci-lint para Go: guía completa con ejemplos prácticos
Procesamiento de JSON en Rust: bibliotecas serde_json y json