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

导读 | 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 注解。

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

原文发布于微信公众号 - 全华班(quanhuaban)

原文发表时间:2017-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏玄魂工作室

实战-如何获取安卓iOS上的微信聊天记录、通过Metasploit控制安卓

在这篇文章中我们将讨论如何获取安卓、苹果设备中的微信聊天记录,并演示如何利用后门通过Metasploit对安卓设备进行控制。文章比较基础、可动手性强,有设备的童...

6579
来自专栏游戏杂谈

libuv在cocos2d-x中的使用

libuv经过Node.js的实践和应用,已经证明非常之成熟,本来之前项目用的是这个:clsocket https://github.com/DFHack/cl...

1393
来自专栏散尽浮华

Gitlab备份和恢复操作记录

前面已经介绍了Gitlab环境部署记录,这里简单说下Gitlab的备份和恢复操作记录: 1)Gitlab的备份目录路径设置 [root@code-server ...

2858
来自专栏Dawnzhang的开发者手册

spring cloud(学习笔记)微服务启动错误(1)

Error starting ApplicationContext. To display the auto-configuration report re-r...

1052
来自专栏向治洪

java项目管理工具maven使用初级

一、前言         早就知道maven 在java 项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档。发现这些文档的作者都是java 的大...

2159
来自专栏一个会写诗的程序员的博客

java日志commons-logging/log4j/slf4j/logBack需要知道的几件事

如果对于commons-loging、log4j、slf4j、LogBack等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望...

874
来自专栏ChaMd5安全团队

众测备忘手册

众测备忘手册 From ChaMd5安全团队核心成员 MoonFish 前言 最近一直在看bugbountyforum对赏金猎人采访的文章以及一些分享姿势的PP...

51810
来自专栏纯洁的微笑

Spring Boot 2.0 版的开源项目云收藏来了!

913
来自专栏Phoenix的Android之旅

开发必须了解的10个Android库

作为一个开发者来说,避免重复造轮子是很重要的,能让你节省很多时间去专注于开发自己的业务。2018年已经过去一大半了,今天介绍下今年以来业界内比较推崇的几个框架,...

2093
来自专栏FreeBuf

判断是否支持Heartbeat的NSE脚本

服务端支持heartbeat是存在heartbleed漏洞的必要条件,如果判断出某SSL端口不支持heartbeat,那基本上就可以排除风险了。 在SSL握手...

1847

扫码关注云+社区