Error while using custom loadbalancer for spring cloud loadbalancer with healthcheck configuration

746 Views Asked by At

I am using a static list (SimpleDiscoveryClient) to loadbalance using spring cloud loadbalancer. Using StickySession Loadbalancer rule in https://github.com/fitzoh/spring-cloud-commons/blob/e10997b6141ff560479ef7065c3547f1f59360c8/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/StickySessionLoadBalancer.java.

My WebClientConfig class:

@Configuration
@LoadBalancerClient(name = "testservice", configuration = CustomLoadBalancerConfiguration.class)
public class WebClientConfig {
    @LoadBalanced
    @Bean
    WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

Custom LoadBalancer Configuration class:

public class CustomLoadBalancerConfiguration {

    @Bean
    ReactorLoadBalancer<ServiceInstance> StickySessionLoadBalancer(Environment environment,
            LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new StickySessionLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class),
                name);
    }
    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
            ConfigurableApplicationContext context) {

        return ServiceInstanceListSupplier.builder()
            .withDiscoveryClient()
               .withHealthChecks()
                .build(context);
    }
}

Posting my yml here :

  spring:
      application:
        name: sample
      cloud:
        discovery:
          client:
            health-indicator:
              enabled: false
            simple:
              instances:
                testservice:
                  - uri: http://localhost:8082
                  - uri: http://localhost:8081
        loadbalancer:
          configurations: health-check
          cache:
            enabled: false
          health-check:
            path:
              default: /actuator/health
            interval: 10000
        gateway:
          routes:
            - id: testrouting
              path: /user/*
              uri: lb://testservice
              predicates:
                - Method=GET,POST
                - Path=/user/**

It's all according to the official documentation. But with the customloadbalancer rule (Stickysession Loadbalancer), the healthchecks to servers are not happening to checkif the servers are alive or not. The server list is always empty (all servers are marked as not alive).

0

There are 0 best solutions below