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

ribbon整合
1.启动EurekaServer2.对provider项目,启动2个实例,也就相当于集群(修改端口启动即可,8089和9090端口)(idea启动2个实例:Edit编辑启动选项,勾选Allow parallel run)3.对customer项目进行配置:(1)启动类(给RestTemplate加上@LoadBalanced注解)加入@LoadBalanced注解,就可以为RestTemplate加入负载均衡的能力@Bean@LoadBalancedpublic 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)。也就是不要被扫描到,新建一个外层的包存放。@Configurationpublic 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