天天看点

SpringCloud集成Ribbon(SpringCloud学习四)

SpringCloud集成Ribbon

​ Ribbon 是一个基于 HTTP 和 TCP 的 客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。

​ 说的明白点就是一个或者多个消费者去调用生产者的方法,但是哪个消费者去调用哪个生产者这个是根据算法来确定的,Ribbon就类似于这个算法。

​ Ribbon有很多的负载均衡算法,轮询策略(默认)、权重轮询策略、随机策略、最少并发数策略、重试策略、可用性敏感策略、区域敏感性策略。很多算法看名字就知道意思,这里算法不是本次讨论的重点,也不再累述,后面有机会了解一下。

​ Ribbon是集成于客户端的,业内也有两种主流的负载均衡的方案。1.集中式负载均衡(服务器负载均衡),通过一个单独的模块来实现负载均衡。2.进程内负载均衡(客户端负载均衡),客户端通过算法去查询合适的生产者,然后调用。可以显而易见的看到Ribbon是属于后者的。

​ 还是老样子,实际操作一下,后面再说原理的事。成功了才会有兴趣去深入。

​ 因为OpenFeign已经集成了Ribbon,所以之前的代码不需要大的改动。

​ 要实现负载均衡,需要有两个生产者。这里直接将一个生产者的文件夹复制,在修改文件夹名字,然后IDE导入模块就可以了。项目结构如下:

SpringCloud集成Ribbon(SpringCloud学习四)

​ 第二个生产者模块需要修改一个端口号,以免两个生产者启动冲突。然后启动两个生产者模块即可。可以看到注册中心页面如下:

SpringCloud集成Ribbon(SpringCloud学习四)

​ 然后使用swagger-ui直接调用消费者的方法,消费者通过OpenFeign调用生产者的方法。会发现两个生产者的控制台在循环打印信息,这是因为Ribbon默认使用的轮询算法。效果如图:

生产者1:

SpringCloud集成Ribbon(SpringCloud学习四)

生产者2:

SpringCloud集成Ribbon(SpringCloud学习四)

​ 总共是调用了五次,所以生产者累计打印了五次。

​ 在编写的过程中才发现,Ribbon更多的是提供了一个思路或者解决办法,解决的问题就是生产者和消费者之间调度的问题。因为SpringCloud对于这些组件集成的比较好(还是之前说的,这些工具的产生是为了加快开发的速度),所以本次更多的还是理解负载均衡的意义和原理。后面也会对这些源码进行阅读,了解深层次的一些东西。

​ 就这样吧,结束。