0404-Ribbon通过代码自定义配置使用配置文件自定义Ribbon Client
Posted 木子旭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0404-Ribbon通过代码自定义配置使用配置文件自定义Ribbon Client相关的知识,希望对你有一定的参考价值。
一、官方文档解读
二、自定义Ribbon客户端-配置类
2.1、自定义负载规则
步骤一、增加TestConfiguration配置类
@Configuration public class TestConfiguration { public IRule ribbonRule() { return new RandomRule();//随机负载 } }
其中:RibbonClient中name 微服务名称,configuration配置类
注意:configuration等于的TestConfiguration必须是@Configuration,但要注意它不在主应用程序上下文的@ComponentScan中,否则它将被所有@RibbonClients共享。如果使用@ComponentScan(或@SpringBootApplication),则需要采取措施以避免包含它(例如,将其放在单独的,不重叠的包中,或者指定要在@ComponentScan中显式扫描的包)。
方式1、TestConfiguration不放在spring boot启动类的当前包或子包中即可
方式2、如果TestConfiguration确实需要放在当前包,需要设置如下
增加注解
public @interface ExcludeFromComponentScan { }
将注解增加至TestConfiguration
@Configuration @ExcludeFromComponentScan public class TestConfiguration { public IRule ribbonRule() { return new RandomRule(); } }
将排除注解增加至启动类
@ComponentScan(excludeFilters= {@ComponentScan.Filter(type=FilterType.ANNOTATION,value=ExcludeFromComponentScan.class)})
步骤二、将:@RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)放到启动类中
多个可以@RibbonClient(name = "microservice-provider-user2", configuration = TestConfiguration.class)
此时只是自定义的按照新的规则负载,原有的还是按照默认的轮询方式使用
2.2、源码查看
查看:@RibbonClient注解发现主要属性为 RibbonClientConfiguration,查看其实现
Spring Cloud Netflix默认为Ribbon提供以下Bean(BeanType beanName:ClassName):
IClientConfig
ribbonClientConfig:DefaultClientConfigImpl
IRule
ribbonRule:ZoneAvoidanceRule
IPing
ribbonPing:DummyPing
ServerList<Server>
ribbonServerList:ConfigurationBasedServerList
ServerListFilter<Server>
ribbonServerListFilter:ZonePreferenceServerListFilter
ILoadBalancer
ribbonLoadBalancer:ZoneAwareLoadBalancer
ServerListUpdater
ribbonServerListUpdater:PollingServerListUpdater
三、自定义Ribbon客户端-配置文件
从1.2.0版开始,Spring Cloud Netflix现在支持使用属性自定义Ribbon客户端以与Ribbon文档兼容。
配置属性
<clientName>.ribbon.:
NFLoadBalancerClassName: should implement ILoadBalancer
NFLoadBalancerRuleClassName: should implement IRule
NFLoadBalancerPingClassName: should implement IPing
NIWSServerListClassName: should implement ServerList
NIWSServerListFilterClassName should implement ServerListFilter
注意:配置优先级高于代码自定义和默认配置,并且不会有代码方式的干扰
示例
users: #微服务名称
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule
以上是关于0404-Ribbon通过代码自定义配置使用配置文件自定义Ribbon Client的主要内容,如果未能解决你的问题,请参考以下文章
如何通过azure设备配置服务从azure功能向iot设备发送自定义错误消息?
超详细配置Zabbix监控通过钉钉实现报警(3.4和4.0版本)