接着执行完毕getServer这个方法后,我们发现,只有一个服务实例了为8090 。第二次调试代码后发现获取的是8091.多次调试后发现是8090和8091是轮询出现的,
也就是说getServer这个方法给我们实现了负载均衡 。看源代码知道,如果未设置负载均衡参数,就使用default 。否则就根据配置的参数选择服务 。
protected Server getServer(ILoadBalancer loadBalancer, Object hint) { if (loadBalancer == null) {return null; } // Use 'default' on a null hint, or just pass it on? return loadBalancer.chooseServer(hint != null ? hint : "default");}
具体的实现的负载均衡算法,本文不做讨论 。
4.负载均衡代码验证演示通过上述源码分析,我们发现如果我们开启了负载均衡,但是没有配置负载均衡参数,则会采用默认的配置,也就是轮询算法来实现负载均衡 。
通过上述的debug阅读,我们参照getServer这个方法来写代码测试下负载均衡
@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping(value = "https://www.520longzhigu.com/shenghuo/order/{orderId}")public Order queryOrderById(@PathVariable("orderId") String orderId) { String serviceId = "hutao-microservice-item"; for(int i = 0 ; i < 10 ; i++) {ServiceInstance choose = loadBalancerClient.choose(serviceId);System.out.println(choose); } //List<ServiceInstance> instances = discoveryClient.getInstances(serviceId); //ServiceInstance serviceInstance = instances.get(0); //String url = serviceInstance.getHost() + ":" + serviceInstance.getPort(); //Items items = restTemplate.getForObject("http://" + serviceId + "/itemservice/item/1" , Items.class); //System.out.println(items); return null;}
5.负载均衡配置在我们之前调试代码的时候我们发现源码中定义了IRule.choose(Object objet)这个接口,并且如下几个实现 。
各个实现如下所示 。
如果我们不想要默认的轮询机制,我们可以采用如上实现中的任何一种
比如,我们设置为随机策略 。
- hutao-microservice-item是我们需要对某个服务设定
- NFLoadBalancerRuleClassName是我们的策略(也就是实现类的路径)
hutao-microservice-item:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
重启服务后,再看我们的负载均衡,是随机的,而不是轮询的 。6.总结
- 注册多个服务:将项目部署在不同的服务器,或者同一个服务器不同端口号,然后注册到注册中心的服务ID(serviceId)保持一致即可;
- 负载均衡实现:通过对RestTemplate添加注解@LoadBalanced,使用代理模式,拦截RestTemplate请求时,访问指定的负载服务,从而实现负载均衡 。
- DiscoveryClient接口他是用来发现服务的,比如发现Netflix服务,其中有个方法List getInstances(String serviceId)是根据服务ID获取服务实例集合 。
- LoadBalancerInterceptor进行请求拦截处理
- RibbonLoadBalancerClient首先通过getLoadBalancer根据服务ID获取到负载,然后getServer会从多个负载中获取到适合的服务 。其实现chooseServer如果没有设置负载均衡规则,则使用默认的轮询算法 。
- IRule接口定义了choose方法 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- linux安装nginx详细教程 查看linux位数系统
- nginx虚拟主机讲解 nginx虚拟主机是什么
- 价位段内体验最均衡的TWS降噪耳机
- 目前最均衡的三星手机 三星哪款手机性能最好
- 靠性能均衡而出名 就平均性能而言,目前最好的内排序
- 纳什均衡理论
- 服务器中用群集实现网络负载平衡
- 什么是网络负载平衡
- 群集节点安装配置网络负载平衡NLB
- 网络负载平衡群集节点创建DNS主机记录