SpringCloud Ribbon 负载均衡的实现
前言
ribbon是一个客户端负载均衡器,它提供了对http和tcp客户端的行为的大量控制。我们在上篇(猛戳:springcloud系列——feign 服务调用)已经实现了多个服务之间的feign调用,服务消费者调用服务提供者,本文记录feign调用ribbon负载均衡的服务提供者
github地址:https://github.com/netflix/ribbon
服务提供者
服务提供者有两个,实际上可以看做只有一个,因为这两个只有端口不同
maven引入ribbon
<!-- ribbon --> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-ribbon</artifactid> </dependency>
创建ribbonconfig文件,主类添加@ribbonclient(name = "ribbonconfig", configuration = ribbonconfig.class),我这里偷懒,直接在主类中创建内部类
@enableeurekaclient @ribbonclient(name = "ribbonconfig", configuration = ribbonconfig.class) @springbootapplication public class springbootspringdatajpaapplication{ public static void main(string[] args) { springapplication.run(springbootspringdatajpaapplication.class, args); } } @configuration class ribbonconfig { @bean public irule ribbonrule(){ return new randomrule(); //分配策略:随机选择一个server // return new bestavailablerule(); //分配策略:选择一个最小的并发请求的server,逐个考察server,如果server被tripped了,则忽略 // return new roundrobinrule(); //分配策略:轮询选择,轮询index,选择index对应位置的server // return new weightedresponsetimerule(); //分配策略:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低 // return new zoneavoidancerule(); //分配策略:复合判断server所在区域的性能和server的可用性选择server // return new retryrule(); //分配策略:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subrule的方式选择一个可用的server } @bean public iping ribbonping() { return new pingurl(); } @bean public serverlistsubsetfilter serverlistfilter() { serverlistsubsetfilter filter = new serverlistsubsetfilter(); return filter; } }
下表显示了spring cloud netflix默认为ribbon提供的bean:
官网例子:
我们添加一个测试接口
@restcontroller @requestmapping("/user") public class usercontroller { @requestmapping("/ribbon") public string ribbon() { return "springdatejpa -- 我的端口是:10088"; } }
第二个服务提供者也是这样配置,注意:应用名要相同(spring.application.name=springdatejpa);端口不同;
服务消费者
服务消费者使用feign调用,无需做任何修改,feign已经使用ribbon。具体配置请戳:springcloud系列——feign 服务调用
@feignclient(name = "springdatejpa", path = "/user/") public interface myspringbootfeign { @requestmapping("/ribbon") string ribbon(); }
/** * feign调用 */ @getmapping("feign/ribbon") string ribbon(){ return myspringbootfeign.ribbon(); }
效果
启动所有项目,我们注册了三个服务,其中:
有两个服务名称相同、处理的业务相同、端口不同,这两台作为服务提供者(可看做是一个“小集群”);
另一个是服务消费者(feign调用);
消费者不断调用,ribbon会从注册中心的服务列表拉取实例集合进行负载均衡调用背后的服务提供者
后记
ribbon负载均衡已经可以实现,更多配置请看官方文档
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 平衡二叉树的左右旋以及双旋转的图文详解
下一篇: 标准化——表格
推荐阅读
-
SpringCloud Ribbon 负载均衡的实现
-
SpringCloud实现SSO 单点登录的示例代码
-
SpringCloud Finchley Gateway 缓存请求Body和Form表单的实现
-
SpringCloud Edgware.SR3版本中Ribbon的timeout设置方法
-
springcloud Zuul动态路由的实现
-
keepalived-nginx-apache-mysql实现高可用、负载均衡的网站(上) NginxKeepalived
-
Keepalived时主备负载均衡器都有VIP的问题:VRRP协议问题 博客分类: keepalived keepalivedvipvrrp
-
SpringCloud 中使用 Ribbon的方法详解
-
SpringCloud实现Redis在各个微服务的Session共享问题
-
SpringCloud与Consul集成实现负载均衡功能