1 简介
1.1 负载均衡解决方案的分类
目前业界主流的负载均衡方案可分成两类:
1)第一类:集中式负载均衡, 即在 consumer 和 provider 之间使用独立的负载均衡设施(可以是硬件,如 F5, 也可以是软件,如 nginx), 由该设施负责把 访问请求 通过某种策略转发至 provider;
2)第二类:进程内负载均衡,将负载均衡逻辑集成到 consumer,consumer 从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的 provider。
Ribbon 就属于后者,它只是一个类库,集成于 consumer 进程,consumer 通过它来获取到 provider 的地址。
2 开干
2.1 创建父工程
2.2 创建服务注册中心Eureka
2.3 创建eureka-client客户端(服务提供者Service Provider)
2.4 创建服务消费者(Ribbon)
启动注册中心eureka-server,分别启动两次eureka-client 端口为8762,8763(修改application.yml的port属性启动两次)最后启动consumer-ribbon 共4个服务如下图:
多次访问:http://localhost:8764/hello?name=shawn
总结:
服务注册中心:eureka-server,端口为8761
服务提供者:eureka-client,端口分别为8762,8763(小集群)分别向服务注册中心注册
服务消费者:consumer-ribbon,端口为8764,向服务注册中心注册
consumer-ribbon通过restTemplate调用eureka-client的hello接口时,因为用ribbon进行了负载均衡,会轮流的调用eureka-client:8762和8763 两个端口的hello接口
Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。
2.5 创建客户端Feign
启动consumer-feign,之前的8761,8762,8763,8764不要停止。重复访问:http://localhost:8765/hello?name=shawn,服务提供者8762,8763不断切换,说明负载均衡起作用了。
如下图,根据ribbon和feign的实现方式得出:
前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。
******文中提到的一个服务多次启用,更改如下,即可配置多个端口启用:
3 总结
就是:发布到注册中心的服务方接口,是 HTTP 的,也可以不用 Ribbon 或者 Feign,直接浏览器一样能够访问
只不过 Ribbon 或者 Feign 调用起来要方便一些,最重要的是:它俩都支持软负载均衡
注意:spring-cloud-starter-feign 里面已经包含了 spring-cloud-starter-ribbon(Feign 中也使用了 Ribbon)
采用feign的方式更优雅(feign内部也使用了ribbon做负载均衡)
参考来源:
https://github.com/LuckyShawn/simple-spring-cloud 【github源码下载】
https://blog.csdn.net/weixin_40037053/article/details/85059444
以防代码丢失,我自己留存了一份,以作备用:
https://github.com/zhaomi0407/springcloud_first.git【github源码下载】