0404-Ribbon通过代码自定义配置使用配置文件自定义Ribbon Client

Posted 木子旭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0404-Ribbon通过代码自定义配置使用配置文件自定义Ribbon Client相关的知识,希望对你有一定的参考价值。

一、官方文档解读

官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_customizing_the_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 {

}
View Code

  将注解增加至TestConfiguration

技术分享图片
@Configuration
@ExcludeFromComponentScan
public class TestConfiguration {    
    public IRule ribbonRule() {
        return new RandomRule();
    }    
}
View Code

  将排除注解增加至启动类

@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版本)

使用自定义数据源配置虚拟实体

SpringBoot中配置文件详解(ymlproperties全局配置和自定义配置),获取配置方式

[Nutch]Solr配置自定义的中文分词器mmseg4j

Kotlin 元编程之 KSP 实战:通过自定义注解配置Compose导航路由