美文网首页
Ribbon使用备忘

Ribbon使用备忘

作者: JohnYuCN | 来源:发表于2021-07-07 18:43 被阅读0次

1. 引入:

因为其与Eureka捆绑,因此可以直接以下形式引入:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

2. 全局规则配置:

(1) 主启动类上,直接配置默认规则

@SpringBootApplication
@EnableEurekaClient
@RibbonClients(defaultConfiguration = RandomRule.class)
public class OrderApp {

以上RandomRule.class,只是规则的简化配置,完整的配置如下:

@RibbonClients(defaultConfiguration = DefaultRibbonConfig.class)
public class RibbonClientDefaultConfigurationTestsConfig {

    public static class BazServiceList extends ConfigurationBasedServerList {

        public BazServiceList(IClientConfig config) {
            super.initWithNiwsConfig(config);
        }

    }

}

@Configuration
class DefaultRibbonConfig {

    @Bean
    public IRule ribbonRule() {
        return new BestAvailableRule();
    }

    @Bean
    public IPing ribbonPing() {
        return new PingUrl();
    }

    @Bean
    public ServerList<Server> ribbonServerList(IClientConfig config) {
        return new RibbonClientDefaultConfigurationTestsConfig.BazServiceList(config);
    }

    @Bean
    public ServerListSubsetFilter serverListFilter() {
        ServerListSubsetFilter filter = new ServerListSubsetFilter();
        return filter;
    }

}

其中:public IRule ribbonRule() ...,就是配置规则的部分,但可以有更加细节的定制的部分。
以上的配置,虽然简化,但只适用于配置全局负载均衡规则。

3. 根据“服务名”,进行规则配置:

(1). 配置两个不同的“规则配置文件”

//========注意:这个两个文件的类路径,不可以被@ComponentScan扫描到!!!==============
@Configuration
public class MyRuleConf{
    @Bean
    public IRule randomRule(){
        return  new RandomRule();
    }
}
//=====================
@Configuration
public class YourRuleConf  {
    @Bean
    public IRule roundRule(){
        return  new RoundRobinRule();
    }
}

(2). 主启动类或一般配置类,进行如下注解:
代码中的paymentother是注册在Eureka中两个不同的服务名

@SpringBootApplication
@EnableEurekaClient
//配置多个规则的方式
@RibbonClients(
            value = {
                    @RibbonClient(value = "payment",configuration = YourRuleConf.class)
                    ,@RibbonClient(value = "other",configuration = MyRuleConf.class)
            }
        )
//配置一个规则的方式:
//@RibbonClient(value = "payment",configuration = YourRuleConf.class)
public class OrderApp {

(3)原理分析:
当RestTemplate在工作时,将会在容器中查找相对应的IRule对象(全局或根据被访问服务名,进行查找相应的对象),而该对象将会相应的Configuration对象产生(Configuration对象可能直接产生在IOC容器中,也可能由Ribbon产生并缓存)。

-- 参考:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html

image.png

相关文章

网友评论

      本文标题:Ribbon使用备忘

      本文链接:https://www.haomeiwen.com/subject/xvpoultx.html