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 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

记一次内存占用问题的调查过程

马哥linux运维 | 最专业的linux培训机构 ---- 最近在维护一台CentOS服务器的时候,发现内存无端"损失"了许多,free和ps统计的结果相差...

2854
来自专栏nnngu

04 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之高并发优化

项目源代码:https://github.com/nnngu/nguSeckill ---- 关于并发 并发性上不去是因为当多个线程同时访问一行数据时,产生了...

3545
来自专栏Java技术

【面试题】2018年最全Java面试通关秘籍第四套!

注:本文是从众多面试者的面试经验中整理而来,其中不少是本人出的一些题目,网络资源众多,如有雷同,纯属巧合!禁止一切形式的碰瓷行为!未经允许禁止一切形式的转载和复...

851
来自专栏.NET技术

.net平台的rabbitmq使用封装

  RabbitMq大家再熟悉不过,这篇文章主要整对rabbitmq学习后封装RabbitMQ.Client的一个分享。文章最后,我会把封装组件和demo奉上。

927
来自专栏计算机技术翻译

ElasticMQ 0.7.0:使用Akka和Spray的长轮询,非阻塞实现

原文地址:https://dzone.com/articles/elasticmq-070-long-polling-non

1919
来自专栏猿人谷

Portal-Basic Java Web应用开发框架V3.0正式发布(源码、实例及文档)

Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定...

1839
来自专栏微服务那些事儿

Spring Cloud 系列-Ribbon

强推一波:https://segmentfault.com/ls/1650000011386794

1314
来自专栏Golang语言社区

Golang语言--开发游戏服务器需要了解的知识

我们以linux环境为列给大家讲解: 1 熟悉网络编程 网络编程主要是涉及到服务器与客户端间的通信,游戏开发中多数采用长链接的形式;短...

34412
来自专栏xingoo, 一个梦想做发明家的程序员

Spark源码分析 之 Driver和Excutor是怎么跑起来的?(2.2.0版本)

今天抽空回顾了一下Spark相关的源码,本来想要了解一下Block的管理机制,但是看着看着就回到了SparkContext的创建与使用。正好之前没有正式的整理...

1927
来自专栏一名合格java开发的自我修养

Storm的ack机制在项目应用中的坑

正在学习storm的大兄弟们,我又来传道授业解惑了,是不是觉得自己会用ack了。好吧,那就让我开始啪啪打你们脸吧。

571

扫描关注云+社区