0

我正在使用静态列表(SimpleDiscoveryClient)使用spring cloud loadbalancer进行负载平衡。在https://github.com/fitzoh/spring-cloud-commons/blob/e10997b6141ff560479ef7065c3547f1f59360c8/spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/core/StickySessionLoadBalancer.java中使用 StickySession Loadbalancer 规则.

我的 WebClientConfig 类:

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

自定义 LoadBalancer 配置类:

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);
    }
}

在这里发布我的 yml :

  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/**

都是按照官方文档来的。但是使用 customloadbalancer 规则(Stickysession Loadbalancer),对服务器的健康检查不会发生以检查服务器是否处于活动状态。服务器列表始终为空(所有服务器都标记为不活动)。

4

0 回答 0