前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springcloud学习手册-Ribbon(常见问题和补充说明)

springcloud学习手册-Ribbon(常见问题和补充说明)

作者头像
程序源代码
发布2018-03-09 17:08:25
1.1K0
发布2018-03-09 17:08:25
举报
文章被收录于专栏:程序源代码程序源代码

导读 | Ribbon常见问题和补充说明

一、 Ribbon-使用配置文件自定义Ribbon Client

从1.2.0开始,Spring Cloud Netflix支持使用properties(配置文件)来定制化Ribbon clients。所以这就可以在不同的服务环境中在启动的时候就可以改变,实现负载客户端。1、说明

属性文件配置中,支持的属性如下(name.ribbon.属性):

  • NFLoadBalancerClassName: 实现ILoadBalancer
  • NFLoadBalancerRuleClassName: 实现IRule
  • NFLoadBalancerPingClassName: 实现IPing
  • NIWSServerListClassName: 实现ServerList
  • NIWSServerListFilterClassName: 实现ServerListFilter

2、举个例子

例如一个叫microservice-provider-user(服务提供者)的服务设置IRule,如下图所示:

3、注意事例

请注意加载时的优先级。在这些属性中定义的Classes优先于@RibbonClient(configuration=MyRibbonConfig.class)定义的beans和由Spring Cloud Netflix提供的缺省值。

二、Using Ribbon with Eureka 如果实现Ribbon与Eureka 联合使用

下面是我从官方文档文明中截取的一张图,里面说的比较详细。

下面翻译的内容也有点不通顺,大家先理解一下。我觉得知道概念就可以了,没必要去光太多时间深入研究。在实际应用的时候用到了再来理解和学习这样比较好。

当Eureka被和Ribbon一起联合使用时, ribbonServerList被一个叫做DiscoveryEnabledNIWSServerList的扩展重载。这个扩展汇聚了来自于Eureka的服务列表。 IPing的接口也被NIWSDiscoveryPing代替,用于委托Eureka来测定服务是否UP。 缺省的ServerListThe是一个DomainExtractingServerList,目的是使得物理上的元数据可以用于负载均衡器,而不必要使用AWA AMI的元数据。 缺省情况下,服务List将根据“zone”信息被创建。(远程客户端设置eureka.instance.metadataMap.zone)。如果这个没有设置,它可以使用d来自于服务hostname的domain name作为zone的代理(取决于approximateZoneFromHostname是否被设置)。一旦那个zone的信息可获得,他可以在ServerListFilter被使用。缺省情况下,由于使用ZonePreferenceServerListFilter,它被用于定位一个和Client相同zone的server。 默认情况下,client的zone是和远程实例一样的,通过eureka.instance.metadataMap.zone来设置。

三、How to use Ribbon Without Eureka 脱离Eureka怎么使用用Ribbon

下面是我从官方文档文明中截取的一张图,里面说的比较详细。

上面这段英文翻译过来的主要意思是:

Eureka是一个实用的方式,它抽象了远程服务的发现机制,可以使你不用在Clinet中硬编码URLS。但如果你不打算使用它,Ribbon和Feign仍然是相当可用的。假设你已经声明了一个@RibbonClient为一个“Stores”的服务。Eureka没有被使用。Ribbon Client会缺省到一个已配置的Server列表。你可以提供配置像: stores.ribbon.listOfServers: example.com,google.com

Example: 没有Eureka,如何使用Ribbon

ribbon.eureka.enabled=false

四、Using the Ribbon API Directly 使用Ribbon API

下面这段代码中直接使用LoadBalancerClient

五、 重试机制

由于Eureka 实现服务治理机制中,强调AP(可用性与可靠性),从而牺牲了一定的一致性。在极端情况下它宁愿接受故障的实例也不要丢掉“健康”实例。比如,当服务注册中心的网络发生故障断开时,由于所有的服务实现无法维持续约心跳,在强调AP的服务治理中心将会把所有服务实例剔除掉,而EUREKA会因为超过85%的实例丢失心跳而会触发保护机制,注册中心会保留此时的所有节点,以实现服务间依然可以进行互相调用的场景,即使其中有部分故障节点,但这样可以继续保障大多数的服务正常消费。

通过RestTemplate 实现的服务访问就会自动根据配置来实现重试策略。

如下是配置详细:

六、总结

Ribbon是一个客户端负载均衡器,能够给HTTP和TCP客户端带来灵活的控制。Ribbon的核心概念是命名的客户端。每一个负载均衡器都是一系列工作在一起的组件的一部分,并用于按需联系远程服务。

咱们在下节课程中介绍到:Feign 声明式服务调用

Feign其实已经使用了Ribbon,在下节中我们会谈到@FeignClient 注解。

声明:文章属于个人原创,转载请注明文章出处

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全华班 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档