前面详细的给大家介绍了SpringBoot的核心内容,有了这部分的基础支持的话,我们再来分析SpringCloud中的相关组件就很容器了,本文我们来给大家开始介绍Ribbon的相关内容,首先来介绍下Ribbon项目在启动的时候完成了哪些操作。
一、项目案例准备
首先我们大家案例环境,通过【RestTemplate】来实现服务调用,通过【Ribbon】实现客户端负载均衡操作。一起来进阶提升吧:463257262【QQ总群】
1.Order服务
我们的Order服务作为服务提供者。创建SpringBoot项目,并添加相关依赖
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
然后在属性文件中添加相关的配置
1 | properties复制代码spring.application.name=spring-cloud-order-service |
然后创建自定义的Controller 提供对外的服务
1 | java复制代码@RestController |
然后我们可以分别启动两个Order服务,端口分别设置为 8081和8082
2.User服务
User服务作为调用用Order服务的客户端。也是我们要重点介绍【Ribbon】的服务。同样创建一个SpringBoot项目,添加相关的依赖
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
然后在属性文件中配置相关信息
1 | properties复制代码spring.application.name=spring-cloud-user-service |
然后创建自定义的Controller来实现服务的调用
1 | java复制代码@RestController |
然后启动User服务访问,可以看到【Ribbon】默认通过轮询的方式来实现了服务的调用
二、Ribbon原理分析
应用比较简单,我们主要是来分析下【Ribbon】的核心原理,先来看看自动装配做了哪些事情。
1.RibbonAutoConfiguration
Ribbon在系统启动的时候自动装配完成的设置,我们先来看看对应的spring.factories 中的配置信息吧
emsp; 所以我们要继续来看【RibbonAutoConfiguration】配置类,我们贴出【RibbonAutoConfiguration】的关键信息
1 | java复制代码@Configuration |
通过源码查看我们知道在SpringBoot项目启动的时候完成了【LoadBalancerClient】对象的注入,且具体的类型为【RibbonLoadBalancerClient】,同时还会完成【LoadBalancerAutoConfiguration】这个配置类型的加载。在看【LoadBalancerAutoConfiguration】做了什么事情之前,我们先来搞清楚【@LoadBalanced】注解的作用
2.LoadBalancerAutoConfiguration
1 | java复制代码@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) |
【@LoadBalanced】本质上就是一个【@Qualifier】注解。作用就是标记,我们通过案例来演示说明。
定义一个简单的【User】类
1 | java复制代码public class User { |
然后定义一个Java配置类,有两个添加了【@LoadBalanced】注解,有一个没有加。
1 | java复制代码@Configuration |
然后创建我们的控制器,来测试使用
1 | java复制代码@RestController |
项目结构
启动SpringBoot项目后我们看效果
搞清楚了【@LoadBalanced】的作用后,我们再来看看【LoadBalancerAutoConfiguration】的配置加载做了什么事情
1 | java复制代码public class LoadBalancerAutoConfiguration { |
通过对应的备注大家可以搞清楚该配置类的作用是实现了对【RestTemplate】对象(被@LoadBalanced修饰)植入
【LoadBalancerInterceptor】拦截器的功能。
小结Ribbon系统时的操作
~好了相信大家应该对于在自动装配时完成了 【RestTemplate】植入拦截器的逻辑应该很清楚了,下篇文章我们详细介绍Ribbon具体是怎么来处理负载均衡逻辑的,敬请期待,欢迎一键三连哦!!!
本文转载自: 掘金