Ribbon是NetFlix发布的负载均衡器,它有助于Http和Tcp的客户端行为。可以根据负载均衡算法(轮询、随机或自定义)自动帮助消费者请求,默认就是轮询。
使用步骤
- 引入pom文件
- 覆盖默认配置
- 写注解
关于Ribbon的pom文件:
在SpringCloud的Eureka或者SpringCloud Alibaba的Nacos的pom文件导入的Jar中已经集成了Ribbon的引用,所以不需要引入新的jar。
关于Ribbon的配置文件:
基本使用不需要编写配置文件,即可使用
关于Ribbon的注解:
当使用RestTempate时
启动类使用@LoadBalanced 注解
package cn.itcast.service; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ItcastServiceConsumerApplication { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); } @Bean @LoadBalanced //开启负载均衡 public DiscoveryClient discoveryClient(){ return new DiscoveryClient(); } public static void main(String[] args) { SpringApplication.run(ItcastServiceConsumerApplication.class, args); } }
调用的时候通过服务名进行调用即可
负载均衡策略自定义实现
实现该接口
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.netflix.loadbalancer; public interface IRule { Server choose(Object var1); void setLoadBalancer(ILoadBalancer var1); ILoadBalancer getLoadBalancer(); }
自定义负载均衡算法
配置位置:消费者yml文件中
语义解析:对于service-provider服务采用的ribbon负载均衡算法是RandomRule