SpringCloud LoadBalancer自定义负载均衡器怎么使用
本文小编为大家详细介绍“SpringCloud LoadBalancer自定义负载均衡器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringCloud LoadBalancer自定义负载均衡器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
Spring Cloud LoadBalancer 帮开发者已经实现了RoundRobinLoadBalancer、RandomLoadBalancer,分别是轮训和随机,默认实现为轮训。
即让是负载均衡组件,那必然有默认实现,也必然有扩展接口暴露给开发者。所以第一步肯定是介绍抽象接口。
// 负载均衡的标志性接口,继承ReactorLoadBalancer接口// 本接口无任何接口增强,仅仅作为一个标志性接口。public interface ReactorServiceInstanceLoadBalancer extends ReactorLoadBalancer<ServiceInstance> // 在Spring Cloud高版本中大部分组件采用了Reacotr框架(有一说一,阅读性极差!!)// 这里定义了一个选择的抽象方法。public interface ReactorLoadBalancer<T> extends ReactiveLoadBalancer<T> {Mono<Response<T>> choose(Request request);default Mono<Response<T>> choose() {return choose(REQUEST);}}
这里有涉及到Reactor框架,不过完全可以当黑盒使用。接口非常的简单就一个choose方法,所以接下来我们只需要实现此接口。
@LoadBalancerClient(value = "deptmanagecloud-provider", configuration = MyConfig.class)public class MyConfig { // 配置负载均衡策略 @Bean public ReactorLoadBalancer<ServiceInstance> myLB(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) { String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); return new MyLB( loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class)); }}
这里有部分逻辑,读者完全可以当作黑盒暂时不需要去理解。只需要明白从注册中心拿到注册表以后会执行getInstanceResponse方法,只需要实现自定义负载均衡策略的逻辑即可,好比我这里的逻辑是永远只调用一个服务(当然,这完全扯淡,仅仅是Demo无须太关心)
既然我们把自定义负载均衡策略写好了,那么,怎么告诉Spring呢?肯定需要注入给Spring。
@LoadBalancerClient(value = "deptmanagecloud-provider", configuration = MyConfig.class)public class MyConfig { // 配置负载均衡策略 @Bean public ReactorLoadBalancer<ServiceInstance> myLB(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) { String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME); return new MyLB( loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class)); }}
这里需要➕上@LoadBalancerClient注解,value为调用方的服务名,configuration为配置类
读到这里,这篇“SpringCloud LoadBalancer自定义负载均衡器怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341