为单元测试配置 RoundRobinLoadBalancer
Configuring RoundRobinLoadBalancer for unit tests
由于 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 的等效代码是什么?
我最近也做了同样的事情,不再使用 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)));
}
}
请注意,我使用空字符串作为 instanceId
和 serviceId
。这可能不是最佳做法,但在我的情况下效果很好。
由于 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 的等效代码是什么?
我最近也做了同样的事情,不再使用 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)));
}
}
请注意,我使用空字符串作为 instanceId
和 serviceId
。这可能不是最佳做法,但在我的情况下效果很好。