一.ribbon用来干什么?
在上一章中我们讲到在80服务的配置类restTemplate Bean上添加@LoadBalanced注解可以赋予restTemplate负载均衡的能力,其中就是用到ribbon这个组件,eureka集成了ribbon这个组件后,许多东西我们不用再写
这一章我们单独来看ribbon这个组件,看看它是如何实现负载均衡的,一句话,我们自定义负载均衡
1.建工程 仿造80建一个84服务
2.写pom 84在80的基础上添加新依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
3.写yaml 注册到eureka上
4.主启动
接下来是重点的地方
5.1写sevice层
接口里面写一个获取服务实例的方法
5.2接口实现类中写负载均衡的算法(不只有下面这种写法)
你要问为什么这样写? 呵呵~调皮!
其实你仔细分析就会发现在下图中getRequestCount()方法中实现的效果就是类似a++的效果,这里返回的是请求次数,但为什么a++不行,因为a++是线程不安全的,不具备原子性,当程序并发时返回的请求数量永远小于实际的请求数,这里用AtomicInteger(创建原子性整数),如果current符合预期值,就将count赋给current并返回false(因为我们取反了 !,不取反会进入死循环)
得到请求次数后,根据请求次数去模服务数量(注册到eureka上的服务提供者),得到服务的下标
然后根据服务的下标得到相应的服务实例并将其返回到controller层
6. 负载均衡的规则配置,这个包不要写在ComponentScan所扫描的包或子包下,否则会被所有搭载ribbon的客户端所共享,达不到特殊化目的
7.配置类 这里面写restTemplate Bean,因为我们自定义了负载均衡,所有不用加@loadbalanced注解
在8001,8002分别写上获取端口号的方法
8.写controller
9.修改主启动类 上加上@RibbonClient注解并写上服务名称,轮询规则
10.测试 先启动7001,再启动8001,8002,最后启动84,通过eureka查看
浏览器访问 http://localhost:84/cloud/lb,不断刷新,成功实现 8001,8002,8001,8002.... 轮询
ribbon就讲到这里 如有错误还请斧正
下一章 openfeign