springcloud系列—ribbon—第2章-3: Ribbon自定义配置

资料参考:《Spring Cloud 微服务实战》

目录

Ribbon负载均衡策略自定义实现

配置

1)通过配置文件配置

2)通过java注解配置

单独使用Ribbon 


由于Ribbon中定义的每一个接口都有多种不同的策略,同时接口直接又有依赖关系,使得我们在用的时候不知道如何选择具体的实现策略已经组织他们的依赖关系。Spring Cloud Ribbon的自动化配置恰好能解决这样的痛点,在引入Spring Cloud Ribbon的依赖之后,就能够自动化构建下面这些接口的实现。

  • IClientConfig:Ribbon的客户端配置,默认采用com. netflix.client.config. DefaultCl ientConfigImpl实现。
  • 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. ZonePre ferenceServerListFilter实现,该策略能够优先过滤出与请求调用方处于同区域的服务实例。
  •  ILoadBalancer :  负载均衡器,默认采用com. netflix. loadbalancer.ZoneAwareLoadBalancer实现,它具备了区域感知的能力。

 通过自动化配置的实现,我们可以轻松地实现客户端负载均衡。同时,针对一些个性化需求,我们也可以方便地替换上面的这些默认实现。只需在Spring Boot应用中创建对应的实现实例就能覆盖这些默认的配置实现。比如下面的配置内容,由于创建了PingUrl实例,所以默认的NoOpPing就不会被创建。

另外,也可以通过使用@RibbonClient注解来实现更细粒度的客户端配置,比如下面的代码实现了为hello-service服务使用HelloServiceConfigurstion中的配置。

 

Ribbon负载均衡策略自定义实现

Ribbonè´è½½åè¡¡ç­ç¥.png

配置

  • 对调用的某个服务启用某种负载策略,有两个方法进行配置

1)通过配置文件配置

hello:
    ribbon:
     NFLoadBalancerRuleClassName:com.netflix.loadbalancer.RandomRule

2)通过java注解配置

@Configuration
public class RibbonConfiguration{
      @Bean
      public IRule ribbonRule(){
          //随机负载
          return new RandomRule();
     }
}


通过注解@RibbonClient为特定的服务配置负载均衡策略

@Configuration
@RibbonClient(name="hello", configuration=RibbonConfiguration.class)
public class TestRibbonConfiguration{

}

以上配置都是在服务消费者中配置。
 

单独使用Ribbon 

因为往往Ribbon配合Eureka使用的,往往也有第三方服务没有注册到Eureka Server,但也部署了多个实例,也需要进行负载均衡,这时可以在服务消费者的配置文件中进行如下方式配置,实现负载均衡

hello:
   ribbon:
      listOfServers:localhost:8010,localhost:8011


注意:如果需要使服务单独配置,那么配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,@SpringBootApplication 注解中就包含了 @ComponentScan 注解,因此必须使配置类处于不同的包以及子包。


上面这些自动化配置内容仅在没有引入SpringCloudEureka等服务治理框架时如此,在同时引入Eurcka和Ribbon依赖时,自动化配置会有一些不同。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值