三、Ribbon实现服务负载均衡
1.Ribbon简介
Ribbon 是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。
负载均衡
服务端:Nginx
客户端:Ribbon
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
详情请参考:https://www.jianshu.com/p/1bd66db5dc46
Ribbon:基于HTTP和TCP,结合Eureka Server 。
2.需添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
注意:因为项目中已经添加“spring-cloud-starter-eureka-server”依赖,在这里已经包含了Ribbon,所以不用再单独引入
3.ribbon的负载均衡策略
注意:
默认不设置的情况下:轮询选择server
4.测试
4.1 轮询测试:RoundRobinRule
打开server,打开2个provider,2个provider保证名称一致,接口一致(接口的URL和参数一致即可),返回内容不同。
@RestController
public class Userservice {
@RequestMapping(value = "/login")
public String login(){
return "登录成功1(另一个这里改为‘登录成功2’)";
}
}
consumer不需要做特殊配置。
依次启动server,2个provider,1个consumer。
测试结果:访问consumer的IP+端口+接口URL,刷新,轮流由2个provider提供。注册中心如图示:
4.2 随机测试:RandomRule
只需在consumer中添加配置:
eureka-provider-demo:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
测试结果:随机性的,比如我的效果是,连续出现了3次provider1,才出现1次provider2。每次测试结果不同。
4.3 其他负载均衡策略均定义在com.netflix.loadbalancer包中,可以根据需要选择合适的策略
内容太多了 我做了模块内容分离,springcloud的5个组件:feign、hystrix、ribbon、zuul、config都有博文分别介绍,如有需要请查看:
springcloud组件之一:feign(client)
springcloud组件之二:hystrix(容错&Hystrix处理容错&Feign项目的监控&Hystrix Dashboard可视化监控&Turbine聚合监控)
springcloud组件之三:Ribbon(轮询和随机负载)