开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:自定义实现负载均衡】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11865
自定义实现负载均衡
内容介绍:
一、代码实现负载均衡
二、随机数的设置
一、代码实现负载均衡
1、简单介绍
最终我们决定在微服务中采用客户端的负载均衡,即在服务的消费者一方采取负载均衡的效果。
下面具体写代码实现负载均衡。在写代码之前,我们需要再模拟出一台服务的提供者,也就是8082的商品微服务,这个功能的实现是非常简单的。
2、实际操作
首先打开 OrderApplication ,选择编辑器的配置,添加一个 Spring Boot 的配置,然后将名字改为 ProductApplication2 ,主类项选择 ProductApplication ,再将 VM options 项输入 -Dserver.port=8082 ,点击应用,然后就可以发现出现了一个ProductApplication2 ,将其启动。
启动完毕之后来到控制台刷新,就可以看到在 server-product 项之后有两个实例了,而且都是健康状态的,还可以点击详情进行进一步的查看,两台 IP 地址都是在109.1上,端口号一个8081一个8082,由此我们就准备好了两个服务提供者。
3、服务提供者选用
接下来我们在服务消费者这一方决定到底使用哪一个服务提供者。下一步找到服务调用的地方,现在默认的调用策略是每次都会选择第一个服务实例,接下来我们要改变这种服务策略。
在两台实例中我们随机挑选一台进行调用,为保证代码的完整性,我们还是复制一份。
二、随机数的设置
1、自定义负载均衡
接下来我们输入 //下单--自定义负载均衡,下一步进行实现,位置就在 //调用商品微服务,查询商品信息处,此时的 instance 里面一经调用就有两个实例了,分别是8081和8082.然后输入 //随机选择 ,实际上就是改变 instances.get(0).; 中的数字,现在是0,意为每次调用第一台,我们只需每次调用的不一样即可,使数字在0和1之间波动就可。
2、随机数的创建
我们通过创建一个随机数,
输入 newRandom().nextInt(bound:2);// 的话有问题,如果我们继续添加一个商品微服务,代码中的数值还得改动,方法是我们只要改动此集合的长度即可
即:
intindex=newRandom().nextInt(bound:instance.size);//,
然后把 index 放到 instance.get(index) 中,这样代码就填写完毕了。
在38处打一个断点,然后选择订单微服务重新跑一次,启动成功之后重新访问一次,点开网页对网址刷新断点就过来了,继续往下走一步,观察实例发现确实是两个,一个8081一个8082,下一步随机数产生,第一次产生的是0那么就会调用第一台了,将断点放一下看效果就知道第一成功了。
然后将 ProductApplication:8081 和 ProductApplication:8082 分别清空,刷新界面并将断点放掉,发现服务端到达了8081上,再次刷新发现没有到8081上,那势必就是到达了8082上,点开8082处发现确实如此,经过多次测试得出结果我们的随机数是完全没有任何问题的。由此我们就实现了自定义的负载均衡。