我们有根据用户的不同调用指定服务实例的需求,因此需要替换掉spring cloud中默认的RoundRobinLoadBalancer,而是使用我们自己的负载均衡。去调用指定实例。如果实现AB测试,灰度发布也会用到这个。spring cloud版本:2020.0.0
资料比较难找,因此记录。上代码。
@LoadBalancerClient(name = "服务提供者名字", configuration = ZBLoadbalancerConfig.class)//就是这类的名字,别改了
public class ZBLoadbalancerConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> reactorServiceInstanceLoadBalancer(Environment environment,
LoadBalancerClientFactory loadBalancerClientFactory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
//这里做个测试ZBRoundRobinLoadBalancer直接继承的RoundRobinLoadBalancer,也是我们自定义的类
return new ZBRoundRobinLoadBalancer(
loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
}
}
上边"ZBRoundRobinLoadBalancer"这个类是我们自定义负载均衡类的名字。做测试用的。使用RandomLoadBalancer,就直接把这个类替换掉即可。@LoadBalancerClient这个注解比较的重要两个值都要配置。
注意:configuration字段为当前类名,不是负载均衡的类名。
根据用户的不同去调用指定实例,待续……