Skip to content

Latest commit

 

History

History
115 lines (87 loc) · 5.02 KB

File metadata and controls

115 lines (87 loc) · 5.02 KB

img

img

img

img

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

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

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.

img

Configuración personalizada del Balanceador de carga.

class ServiceInstanceListSupplier{
	
	@Autowired
	LoadBalancerInstanceConfig config;
	
	@Autowired
    @Lazy
    EurekaClient eurekaClient;
	
	@Bean
	@Primary	
	ServiceInstanceListSupplier serviceInstanceListSupplier() throws Exception {
		List<InstanceInfo> instanceInfoList = eurekaClient.getApplications()
				.getRegisteredApplications(WebClientInstanceConfig.InstanceName)
				.getInstances();
		
		if(instanceInfoList == null || instanceInfoList.size() == 0)
			throw new Exception("instances not found.");
		
		Boolean isSecure = config.getEnabledSSL();
		List<Triplet<String, Integer, Boolean>> instances = eurekaClient.getApplications()
				.getRegisteredApplications(WebClientInstanceConfig.InstanceName)
				.getInstances().stream()
				.filter(e -> e.getStatus().equals(InstanceStatus.UP))
				.map(e -> new Triplet<String, Integer, Boolean>(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

img

img

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

Configuración básica de Circuit Breaker

@Bean	
Customizer<ReactiveResilience4JCircuitBreakerFactory> 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 img

Configuración básica de Circuit Breaker - minimumNumberOfCalls img