一、什么是Ribbon
Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用
二、为服务消费者整合Ribbon
1、引入依赖:spring-cloud-starter-ribbon(spring-cloud-starter-eureka中已包含了ribbon)
2、为RestTemplate添加@LoadBalanced注解
3、将请求地址修改为虚拟主机名,Ribbon会自动把虚拟主机名映射称网络地址(默认情况下,虚拟主机名和服务名称是一样的,也可以通过配置属性eureka.instance.virtual-host-name或者eureka.instance.secure-virtual-host-name。虚拟主机名不能包含下划线)
三、利用java代码自定义Ribbon配置
IClientConfig:Ribbon 的客户端配置,默认采用 com.netflix.client.config.DefaultClientConfigImpl 实现。
IRule:Ribbon 的负载均衡策略,默认采用 com.netflix.loadbalancer.ZoneAvoidanceRule 实现,该策略能够在多区域环境下选择最佳区域的实例进行访问
IPing:Ribbon 的实例检查策略,默认采用 com.netflix.loadbalancer.NoOpPing 实现,该检查策略是一个特殊的实现,实际上他并不会检查实例是否可用,而是始终返回 true ,默认认为所有服务实例都是可以使用
ServerList<Server>:服务实例清单的维护机制,默认采用 com.netflix.loadbalancer.ConfigurationBasedServerList 实现。
ServerListFilter<Server>:服务实例清单过滤机制,默认采用 org.springframework.cloud.netflix.ribbon.ZonePreferenceServerListFilter 实现,该策略能够优先过滤出与请求调用方处理同区域的服务实现
ILoadBalancer:负载均衡器,默认采用 com.netflix.loadbalancer.ZoneAwareLoadBalancer 实现,他具备了区域感知的能力
//该类为Ribbon配置类 //该类不应该在主应用程序上下文的@ComponentScan中,否则该类中的配置信息就会被所有的@RibbonClient共享 @Configuration public class RibbonConfiguration{ @Bean public IRule ribbonRule(){ return new RandomRule(); } } //空类,添加@Configuration和@RibbonClient注解 @Configuration @RibbonClient(name = "microservice-provider-user",configuration = "RibbonConfiguration.class") public class TestConfiguration{ }
四、使用属性自定义Ribbon配置
//TODO
五、脱离Eureka使用Ribbon
由于脱离了Eureka,微服务不再缓存服务列表,所以需要在配置文件中配置可访问的服务列表
server: port: 8010 spring: application: name:microservice-consumer-movie microservice-provider-user; ribbon: listOfServers: localhost:8000,localhost:8001
Nacos Discovery
内部默认集成了Ribbon
,集成的方式跟Eureka
几乎一致