鉴于章节(四)文章中引入了拓展思考,在很多场景下,我们需要自定义 Ribbon 的配置,此篇主要 demo 示例为修改 Ribbon 的负载均衡策略。
Ribbon 配置自定义
配置自定义可以分为如下两种:
- 使用 Java 代码自定义 Ribbon 配置,配置指定名称的 Ribbon Client
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 示例也是基于此种形式实现的。
NFLoadBalancerClassName: 配置 ILoadBalancer 的实现类 NFLoadBalancerRuleClassName: 配置 IRule 的实现类 NFLoadBalancePingClassName:配置 IPing 的实现类 NIWSServerlistClassName: 配置 ServerList 的实现类 NIWSServerListFilterClassName:配置 ServerListFilter 的实现类
项目组织结构
服务消费者
microservice-consumer-moive-ribbon
- application.yaml 中通过定义配置来实现负载均衡策略,追加如下内容:
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 页面如下:
多次请求 consumer user-log-instance 接口,查看 provider 日志会发现,请求响应的实例确实发生了变化:
此章节示例 demo 代码:chapter3-2
--------------------- 分割线 ---------------------
感觉写这玩意有点健身的意思:),想想今天还没码字感觉怪怪的,还是在半夜把这玩意搞了,舒坦些。