SpringCloud-NetFlix OSS-Ribbon介绍

介绍:Ribbon是客户端负载平衡器,可让您对HTTP和TCP客户端的行为进行大量控制。Feign已经使用了Ribbon。

Ribbon中的中心概念是指定客户端的概念。每个负载平衡器都是组件的一部分,这些组件可以一起工作以按需联系远程服务器,并且该组件具有一个名称,您可以将其命名为应用程序开发人员(例如,使用@FeignClient批注)。根据需要,Spring Cloud通过使用RibbonClientConfiguration为每个命名客户端创建一个新的集合作为ApplicationContext。它包含(除其他事项外)一个ILoadBalancer,一个RestClient和一个ServerListFilter

Maven坐标G org.springframework.cloud,A spring-cloud-starter-netflix-ribbon

自定义Ribbon客户端:您可以使用<client>.ribbon.*中的外部属性来配置Ribbon客户端的某些位,这与本机使用Netflix API相似,不同之处在于可以使用Spring Boot配置文件。

@Configuration
@RibbonClient(name = "custom", configuration = CustomConfiguration.class)
public class TestConfiguration {
}

在这种情况下,Ribbon客户端由RibbonClientConfiguration中已经存在的组件以及CustomConfiguration中的任何组件组成(后者通常会覆盖前者)。另外注意CustomConfiguration 必须标注@Configuration注解并且不能被@ComponentScan扫描到,否则将被所有@RibbonClients共享

Spring Cloud Netflix默认为Ribbon提供了以下的类
在这里插入图片描述

在这里插入图片描述

我们可以通过像下面一样重写上面的类,然后把它放到@RibbonClient中(上面)

@Configuration(proxyBeanMethods = false)
protected static class FooConfiguration {

    @Bean
    public ZonePreferenceServerListFilter serverListFilter() {
        ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter();
        filter.setZone("myTestZone");
        return filter;
    }

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

}

使用@RibbonClients自定义所有Ribbon客户端

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

    public static class BazServiceList extends ConfigurationBasedServerList {

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

    }

}

@Configuration(proxyBeanMethods = false)
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;
    }

}

通过Properties自定义Ribbon客户端,从Spring Cloud Netflix1.2.0开始支持通过设置属性支持Ribbon客户端(兼容官方属性)github文档

可配置的属性参考,这些属性中定义的类优先于使用@RibbonClient(configuration = MyRibbonConfig.class)定义的bean和Spring Cloud Netflix提供的默认值。
在这里插入图片描述

属性配置栗子
在这里插入图片描述

Ribbon结合Eureka一起使用:当Eureka 也在类路径下时,ribbonServerList被重写为DiscoveryEnabledNIWSServerListIPing 接口也被替换成NIWSDiscoveryPing

脱离Eureka使用Ribbon
在这里插入图片描述

在这里插入图片描述

直接使用Ribbon API

public class MyClass {
    @Autowired
    private LoadBalancerClient loadBalancer;

    public void doStuff() {
        ServiceInstance instance = loadBalancer.choose("stores");
        URI storesUri = URI.create(String.format("https://%s:%s", instance.getHost(), instance.getPort()));
        // ... do something with the URI
    }
}

Ribbon的缓存配置:每个Ribbon的命名客户端都有一个相应的子应用程序上下文,Spring Cloud会维护该上下文。这个子应用程序上下文是懒加载的,第一次客户请求时候加载。可以设置为启动时候加载,如下
在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值