鉴于章节(四)文章中引入了拓展思考,在很多场景下,我们需要自定义 Ribbon 的配置,此篇主要 demo 示例为修改 Ribbon 的负载均衡策略。


Ribbon 配置自定义

配置自定义可以分为如下两种:

  1. 使用 Java 代码自定义 Ribbon 配置,配置指定名称的 Ribbon Client
    1
    2
    3
    4
    5
    6
    7
    IClientConfig ribbonClientConfig: DefaultClientConfigImpl
    IRule ribbonRule: ZoneAvoidanceRule
    IPing ribbonPing: DummyPing
    ServerList<Server> ribbonServerList: ConfigurationBasedServerList
    ServerListFilter<Server> ribbonServerListFilter: ZonePreferenceServerListFilter
    ILoadBalancer ribbonLoadBalancer: ZoneAwareLoadBalancer
    ServerlistUpdater ribbonServerListUpdater: PolingServerListUpdater
    实际上就是通过注解声明式的实现了 Ribbon Client 的负载均衡策略
  2. 使用属性自定义 Ribbon 配置,客观感觉此种方式也是比 Java 代码配置的方式更加方便,此章节的 demo 示例也是基于此种形式实现的。
    1
    2
    3
    4
    5
    NFLoadBalancerClassName: 配置 ILoadBalancer 的实现类
    NFLoadBalancerRuleClassName: 配置 IRule 的实现类
    NFLoadBalancePingClassName:配置 IPing 的实现类
    NIWSServerlistClassName: 配置 ServerList 的实现类
    NIWSServerListFilterClassName:配置 ServerListFilter 的实现类

    项目组织结构

    sc5-1

    服务消费者

    microservice-consumer-moive-ribbon

  • application.yaml 中通过定义配置来实现负载均衡策略,追加如下内容:
    1
    2
    3
    microservice-provider-user-ribbon:
    ribbon:
    NFLoadBalanceerRuleClassName: com.netflix.loadbalancer.RnadomRule
  • 另外两个服务无需改动*

    验证

    启动 microservice-discovery-eureka 实例一个,microservice-consumer-moive-ribbon-customizing-properties 实例一个,microservice-provider-user-ribbonn 实例一个,如果运行无误的情况下会嗨皮的发下 Eureka Portal 页面如下:
    sc5-2

多次请求 consumer user-log-instance 接口,查看 provider 日志会发现,请求响应的实例确实发生了变化:
sc5-3
sc5-4

示例代码链接