ribbon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。
为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。
Ribbon默认为我们提供了很多的负载均衡算法,例如:轮询,随机等,也可自定义;
简单的说,就是在配置文件中列出负载均衡后面所有的机器,Ribbon会自动的帮你基于某种规则
(如:简单的轮询、随机连接等)去连接这些机器
而在SpringCloud中使用Ribbon和Eureka时,Ribbon会自动从EurekaServer中获取服务提供者地址列表,
并基于负载均衡算法。
默认负载均衡算法

ribbon整合
1.启动EurekaServer
2.对provider项目,启动2个实例,也就相当于集群(修改端口启动即可,8089和9090端口)
(idea启动2个实例:Edit编辑启动选项,勾选Allow parallel run)
3.对customer项目进行配置:
(1)启动类(给RestTemplate加上@LoadBalanced注解)
加入@LoadBalanced注解,就可以为RestTemplate加入负载均衡的能力
@Bean
@LoadBalanced
public RestTemplate getTemplate(){
return new RestTemplate();
}
4.编写测试Controller
@GetMapping("/testribbon")
public String ribbon(){
//查找对应服务实例,会通过负载均衡的算法返回
ServiceInstance choose = loadBalancerClient.choose("provider");
System.out.println("负载均衡 -> "+choose.getServiceId()+":"+choose.getHost()+":"+choose.getPort());
return choose.getServiceId() + ":" + choose.getHost() + ":" + choose.getPort();
}
//访问:http://localhost:9092/testribbon输出内容
负载均衡 -> provider:localhost:9090
负载均衡 -> provider:localhost:8089
负载均衡 -> provider:localhost:9090
负载均衡 -> provider:localhost:8089
负载均衡 -> provider:localhost:9090
自定义ribbon负载均衡算法
1.启动类加入注解,指定服务名和配置类
//用于配置功能区客户端
@RibbonClient(name = "provider",configuration= MyRibbonRule.class)
2.配置类应注意:
MyRibbonRule.class必须是@Configuration,但请注意,它不在主应用程序上下文的@ComponentScan中,
否则将由所有@RibbonClients共享。如果您使用@ComponentScan(或@SpringBootApplication),
则需要采取措施避免包含(例如将其放在一个单独的,不重叠的包中,或者指定要在@ComponentScan)。
也就是不要被扫描到,新建一个外层的包存放。
@Configuration
public class MyRibbonRule {
@Bean
public IRule muRule() {
return new RandomRule();// 随机
}
}
3.如果以上方法看着不舒服,可采用配置文件的方式来实现
去除@RibbonClient注解
application.yml文件添加:
provider: # 服务名
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 算法
禁用ribbon
在application.yml配置文件中添加:
ribbon:
eureka:
enabled: false