【问题标题】:Configuring RoundRobinLoadBalancer for unit tests为单元测试配置 RoundRobinLoadBalancer
【发布时间】:2020-04-28 06:21:34
【问题描述】:

由于 Ribbon 客户端负载均衡器处于维护模式,我通过将 spring.cloud.loadbalancer.ribbon.enabled 设置为 false 迁移到 RoundRobinLoadBalancer。 我曾经使用 Ribbon 进行客户端测试

@Configuration
@Profile("test")
public class ClientTestConfig {
  @Bean
  public StubServer stubServer() {
      return new StubServer().run();
  }

  @Bean
  public ServerList<Server> ribbonServerList() {
      return new StaticServerList<>(new Server("localhost", stubServer().getPort()));
  }
}

上面的 RoundRobinLoadBalancer 的代码是什么?

【问题讨论】:

    标签: java spring-boot configuration spring-cloud ribbon


    【解决方案1】:

    我最近从 Ribbon 做了同样的切换。 Spring 指南之一有一个如何配置自定义ServiceInstanceListSupplier 的示例: https://spring.io/guides/gs/spring-cloud-loadbalancer/#_load_balance_across_server_instances

    对于您的情况,这可能看起来像这样:

    @Configuration
    @Profile("test")
    public class ClientTestConfig {
      @Bean
      public StubServer stubServer() {
          return new StubServer().run();
      }
    
      @Bean
      ServiceInstanceListSupplier serviceInstanceListSupplier() {
        return new MyServiceInstanceListSupplier(stubServer().getPort());
      }
    }
    
    class MyServiceInstanceListSupplier implements ServiceInstanceListSupplier {
    
      private final Integer port;
    
      MyServiceInstanceListSupplier(Integer port) {
        this.port = port;
      }
    
      @Override
      public String getServiceId() {
        return "";
      }
    
      @Override
      public Flux<List<ServiceInstance>> get() {
        return Flux.just(Arrays.asList(new DefaultServiceInstance("", "", "localhost", port, false)));
      }
    }
    

    请注意,我使用空字符串作为 instanceIdserviceId。这可能不是最佳做法,但在我的情况下效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2015-12-17
      相关资源
      最近更新 更多