客户端负载均衡—Ribbon初探

一、什么是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自定义配置

四、使用属性自定义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几乎一致

猜你喜欢

转载自www.cnblogs.com/yanghanwen/p/12093677.html
今日推荐