购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.3 Ribbon配置自定义

很多场景下,可能根据需要自定义Ribbon的配置,例如修改Ribbon的负载均衡规则等。Spring Cloud Edgware允许使用Java代码或属性自定义Ribbon的配置,两种方式是等价的。

5.3.1 使用Java代码自定义Ribbon配置

本小节来讨论如何使用Java代码自定义Ribbon的配置。

5.3.1.1 配置指定名称的Ribbon Client

在Spring Cloud中,Ribbon的默认配置如下(格式是BeanType beanName:ClassName):

●IClientConfig ribbonClientConfig:DefaultClientConfigImpl

●IRule ribbonRule:ZoneAvoidanceRule

●IPing ribbonPing:DummyPing

●ServerList<Server>ribbonServerList:ConfigurationBasedServerList

●ServerListFil ter<Server>ribbonServerListFilter:ZonePreferenceServerListFilter

●ILoadBalancer ribbonLoadBalancer:ZoneAwareLoadBalancer

●ServerListUpdater ribbonServerListUpdater:PollingServerListUpdater

简单说明一下,例如以下代码:

img

BeanType是IRule,beanName是ribbonRule,ClassName是ZoneAvoidanceRule,这是一种根据服务提供者所在Zone的性能以及服务提供者可用性综合计算,选择提供者节点的负载均衡规则。

在Spring Cloud中,Ribbon默认的配置类是RibbonCl ientConfiguration。也可使用一个POJO自定义Ribbon的配置(自定义配置会覆盖默认配置)。这种配置是细粒度的,不同名称的Ribbon客户端可使用不同配置。

下面来为名为microservice-provider-user的Ribbon客户端自定义配置。

1.复制项目microservice-consumer-movie-ribbon,将ArtifactId修改为microservice-consumer-movie-ribbon-customizing。

2.创建Ribbon的配置类。

img
img

3.创建一个空类,并在其上添加@Configuration注解和@RibbonCl ient注解。

img

由代码可知,使用@RibbonClient注解的configuration属性,即可自定义指定名称Ribbon客户端的配置。

img

测试

1.启动microservice-discovery-eureka。

2.启动2个或更多microservice-provider-user实例。

3.启动microservice-consumer-movie-ribbon-custom izing。

4.多次访问 http://localhost:8010/log-user-instance ,可获得类似如下的日志:

img
img

此时请求会随机分布到两个用户微服务节点上,说明已经实现了Ribbon的自定义配置。

img

必须注意的是,本例中的RibbonConfiguration类不能存放在主应用程序上下文的@ComponentScan所扫描的包中,否则该类中的配置信息将被所有的@RibbonCl ient共享。

因此,如果只想自定义某一个Ribbon客户端的配置,必须防止@Configuration注解的类所在的包与@ComponentScan扫描的包重叠,或应显式指定@ComponentScan不扫描@Configuration类所在的包。

5.3.1.2 全局配置

可使用@RibbonCl ients注解为所有Ribbon Client提供默认配置,示例:

img
img

5.3.2 使用属性自定义Ribbon配置

从Spring Cloud Netflix 1.2.0开始(即从Spring Cloud Cam den RELEASE开始,读者可前往第2.3.2节查看Spring Cloud各版本所使用的子项目版本),Ribbon支持使用属性自定义。这种方式比使用Java代码配置的方式更加方便。

支持的属性如下,配置的前缀是<clientName>.ribbon.。其中,<clientName>是Ribbon Client的名称, 如果省略,则表示全局配置

●NFLoadBalancerClassName:配置ILoadBalancer的实现类。

●NFLoadBalancerRuleClassName:配置IRule的实现类。

●NFLoadBalancerPingClassName:配置IPing的实现类。

●NIWSServer ListClassName:配置Server List的实现类。

●NIWSServer ListFilterClassName:配置Server ListFilter的实现类。

下面,我们来用属性来修改名为microservice-provider-user的Ribbon Client的负载均衡规则。

复制项目microservice-consumer-movie-ribbon,将ArtifactId修改为microservice-consumer-movie-ribbon-customizing-proper ties。在项目的application.yml中添加以下内容即可:

img

这样,就可将名为microservice-provider-user的Ribbon Client的负载均衡规则设为随机。

若配置成如下形式,则表示对所有Ribbon Client都使用RandomRule:

img

由代码不难看出,使用属性自定义的方式比用Java代码配置方便很多。

img

测试

1.启动microservice-discovery-eureka。

2.启动两个或更多microservice-provider-user实例。

3.启动microservice-consumer-movie-ribbon-custom izing-properties。

4.多次访问 http://localhost:8010/log-user-instance ,查看日志,会发现此时请求依然会随机分布到两个用户微服务节点上。

img

属性配置的方式比Java代码配置的方式 优先级更高 7YhG9JJHEsjlCXG/8Jt15vFRJM7XzdUfCloMygpZlzg7jBg8K9Ek9AF9WVC4oUjF

点击中间区域
呼出菜单
上一章
目录
下一章
×