https://github.com/cochachyle-dev/proyectobancos1-service1
https://github.com/cochachyle-dev/proyectobancos1-service1
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/cochachyle-dev/proyectobancos1-service1
- Owner: cochachyLE-Dev
- Created: 2022-09-03T00:55:40.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-09-12T14:33:55.000Z (almost 4 years ago)
- Last Synced: 2025-02-22T19:13:03.722Z (over 1 year ago)
- Language: Java
- Size: 561 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README




No se registra el servicio "Service1" en Eureka, es innecesario. Se usa EurekaClient para acceder a las instancias del servicio para luego usarlas en el Balanceador de carga.
Configuración básica de EurekaClient
```yaml
eureka:
client:
register-with-eureka: false # No registra el servicio en Eureka
serviceUrl:
defaultZone: http://localhost:8761/eureka
```
Configuración personalizada del Balanceador de carga [Service1.yml].
Es necesario especificar el tipo de protocolo "http" o "https" con la propiedad EnabledSSL
```yaml
vaetech:
load-balancer:
instance1:
enabledSSL: false # Especificar True cuando las instancias tienen un enlace seguro.
instance2:
enabledSSL: false # Especificar True cuando las instancias tienen un enlace seguro.
```
Configuration personalizada de Balanceador de carga para microservicio1, microservicio2, ....
Se considera el despliegue de los microservicios en multiples servidores.

Configuración personalizada del Balanceador de carga.
```java
class ServiceInstanceListSupplier{
@Autowired
LoadBalancerInstanceConfig config;
@Autowired
@Lazy
EurekaClient eurekaClient;
@Bean
@Primary
ServiceInstanceListSupplier serviceInstanceListSupplier() throws Exception {
List instanceInfoList = eurekaClient.getApplications()
.getRegisteredApplications(WebClientInstanceConfig.InstanceName)
.getInstances();
if(instanceInfoList == null || instanceInfoList.size() == 0)
throw new Exception("instances not found.");
Boolean isSecure = config.getEnabledSSL();
List> instances = eurekaClient.getApplications()
.getRegisteredApplications(WebClientInstanceConfig.InstanceName)
.getInstances().stream()
.filter(e -> e.getStatus().equals(InstanceStatus.UP))
.map(e -> new Triplet(e.getIPAddr(), e.getPort(), isSecure)).toList();
if(instances.size() == 0)
throw new Exception("no available instances found.");
return new MicroServiceInstanceListSupplier(WebClientInstanceConfig.InstanceName, instances);
}
}
```
Controlador de instancias para EurekaClient. La idea es mostrar las instancias de Service-Discovery en el Admin-Server [ProyectoBancoS1-AdminServer](https://github.com/cochachyLE-Dev/ProyectoBancoS1-AdminServer)


Con está vista se tendría una visión más completa del Service-Discovery.

Configuración básica de Circuit Breaker
```Java
@Bean
Customizer defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig
.custom()
// slidingWindowSize: Configura el tamaño de la ventana deslizante que se utiliza para registrar el resultado de las llamadas cuando se cierra el disyuntor.
.slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)
.slidingWindowSize(10)
// minimumNumberOfCalls: Configura el número máximo de llamadas después de la primera exception (disyuntor medio abierto).
.minimumNumberOfCalls(5)
// waitDurationInOpenState: Configura la duración del tiempo de espera antes de pasar de abierto a medio abierto.
.waitDurationInOpenState(Duration.ofSeconds(15))
// failureRateThreshold: Configura el umbral de tasa de errores en porcentaje.
.failureRateThreshold(25)
.build())
.timeLimiterConfig(TimeLimiterConfig.custom()
// timeoutDuration: Configura la duración del tiempo de espera de respuesta del microservicio.
.timeoutDuration(Duration.ofSeconds(1))
.build())
.build());
}
```
Configuración básica de Circuit Breaker - timeoutDuration

Configuración básica de Circuit Breaker - minimumNumberOfCalls
