Spring Cloud - Ribbon客户端的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud - Ribbon客户端的使用相关的知识,希望对你有一定的参考价值。

从版本1.2.0开始,Spring Cloud Netflix现在支持使用属性与Ribbon文档兼容来自定义Ribbon客户端

这允许您在不同环境中更改启动时的行为。

支持的属性如下所示,应以<clientName>.ribbon.为前缀:

  • NFLoadBalancerClassName:应实施ILoadBalancer

  • NFLoadBalancerRuleClassName:应实施IRule

  • NFLoadBalancerPingClassName:应实施IPing

  • NIWSServerListClassName:应实施ServerList

  • NIWSServerListFilterClassName应实施ServerListFilter

    要设置服务名称usersIRule,您可以设置以下内容:

    application.yml
    users:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

    当Eureka与Ribbon结合使用(即两者都在类路径上)时,ribbonServerList将被扩展为DiscoveryEnabledNIWSServerList,扩展名为Eureka的服务器列表。它还用NIWSDiscoveryPing替换IPing接口,代理到Eureka以确定服务器是否启动。默认情况下安装的ServerList是一个DomainExtractingServerList,其目的是使物理元数据可用于负载平衡器,而不使用AWS AMI元数据(这是Netflix依赖的)。默认情况下,服务器列表将使用实例元数据(如远程客户端集合eureka.instance.metadataMap.zone)中提供的“区域”信息构建,如果缺少,则可以使用服务器主机名中的域名作为代理用于区域(如果设置了标志approximateZoneFromHostname)。一旦区域信息可用,它可以在ServerListFilter中使用。默认情况下,它将用于定位与客户端相同区域的服务器,因为默认值为ZonePreferenceServerListFilter默认情况下,客户端的区域与远程实例的方式相同,即通过eureka.instance.metadataMap.zone

    Eureka是一种方便的方式来抽象远程服务器的发现,因此您不必在客户端中对其URL进行硬编码,但如果您不想使用它,Ribbon和Feign仍然是适用的。假设您已经为“商店”申请了@RibbonClient,并且Eureka未被使用(甚至不在类路径上)。Ribbon客户端默认为已配置的服务器列表,您可以提供这样的配置

    application.yml
    stores:
      ribbon:
        listOfServers: example.com,google.com

    设置属性ribbon.eureka.enabled = false将明确禁用在Ribbon中使用Eureka。

    application.yml
    ribbon:
      eureka:
       enabled: false

    直接使用Ribbon API

    您也可以直接使用LoadBalancerClient例:

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

以上是关于Spring Cloud - Ribbon客户端的使用的主要内容,如果未能解决你的问题,请参考以下文章

spring-cloud-starter-ribbon提供客户端的软件负载均衡算法

Spring Cloud Ribbon

Spring Cloud 入门教程: Ribbon实现客户端的负载均衡

Spring Cloud 入门教程: Ribbon实现客户端的负载均衡

Spring Cloud之客户端负载平衡器:Ribbon

跟我学习Spring cloud-客户端负载平衡器:Ribbon