说明:SpringCloud系列笔者自学系列,学习来源是周立的博客 http://www.itmuch.com/ 。而此处转载其博客只是为了方便自己以后的学习。
本篇来源 http://www.itmuch.com/spring-cloud/finchley-8/
上一节讲了Ribbon的入门姿势,本节深入探讨Ribbon的高级特性。
内置负载均衡规则
负载均衡规则是Ribbon的核心,下面来看一下Ribbon内置的负载均衡规则。
- AvailabilityFilteringRule:过滤掉一直连接失败的被标记为circuit tripped的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤server的逻辑,其实就就是检查status里记录的各个Server的运行状态;
- BestAvailableRule:选择一个最小的并发请求的Server,逐个考察Server,如果Server被tripped了,则跳过。
- RandomRule:随机选择一个Server;
- ResponseTimeWeightedRule:作用同WeightedResponseTimeRule,二者作用一样;
- RetryRule:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server;
- RoundRobinRule:轮询选择, 轮询index,选择index对应位置的Server;
- WeightedResponseTimeRule:根据响应时间加权,响应时间越长,权重越小,被选中的可能性越低;
- ZoneAvoidanceRule:复合判断Server所在区域的性能和Server的可用性选择Server;
如需自定义负载均衡规则,只需实现IRule
接口或继承AbstractLoadBalancerRule
、PredicateBasedRule即可
,读者可参考RandomRule
、RoundRobinRule
、ZoneAvoidanceRule
等内置Rule编写自己的负载均衡规则。
Ribbon配置自定义【细粒度配置】
Ribbon可实现精确到目标服务的细粒度配置。例如A服务调用服务B,A服务调用C,可以针对B服务一套配置,针对C服务另一套配置。
方式1、代码配置方式
在Spring Cloud中,Ribbon的默认配置如下(格式是BeanType
beanName: ClassName
):
-
IClientConfig
ribbonClientConfig:DefaultClientConfigImpl
-
IRule
ribbonRule:ZoneAvoidanceRule
-
IPing
ribbonPing:NoOpPing
-
ServerList<Server>
ribbonServerList:ConfigurationBasedServerList
-
ServerListFilter<Server>
ribbonServerListFilter:ZonePreferenceServerListFilter
-
ILoadBalancer
ribbonLoadBalancer:ZoneAwareLoadBalancer
-
ServerListUpdater
ribbonServerListUpdater:PollingServerListUpdater
代码示例
-
创建一个空类,并在其上添加
@Configuration
注解和@RibbonClient
注解。/** * 使用RibbonClient,为特定的目标服务自定义配置。 * 使用@RibbonClient的configuration属性,指定Ribbon的配置类。 * 可参考的示例: * http://spring.io/guides/gs/client-side-load-balancing/ * @author 周立 */ "microservice-provider-user", configuration = RibbonConfiguration.class) (name = public class TestConfiguration { }
由代码可知,使用
@RibbonClient
注解的configuration属性,即可自定义指定名称Ribbon客户端的配置。 -
创建Ribbon的配置类。
/** * 该类为Ribbon的配置类 * 注意:该类不能放在主应用程序上下文@ComponentScan所扫描的包中,否则配置将会被所有Ribbon Client共享。 * @author 周立 */ public class RibbonConfiguration { public IRule ribbonRule() { // 负载均衡规则,改为随机 return new RandomRule(); } }
配套代码
方式2、属性配置方式【推荐】
<clientName>.ribbon.
如下属性
-
NFLoadBalancerClassName
: should implementILoadBalancer
-
NFLoadBalancerRuleClassName
: should implementIRule
-
NFLoadBalancerPingClassName
: should implementIPing
-
NIWSServerListClassName
: should implementServerList
-
NIWSServerListFilterClassName
should implementServerListFilter
代码示例
user: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule |
TIPS
属性配置的优先级高于代码配置。
配套代码
Ribbon配置自定义【全局配置】
方式1、代码配置方式
(defaultConfiguration = DefaultRibbonConfig.class)public class RibbonClientDefaultConfigurationTestsConfig { } class DefaultRibbonConfig { public IRule ribbonRule() { return new RandomRule(); } } |
方法2、属性配置方式【推荐】
和上文细粒度配置类似,只需将目标服务名称前缀去掉即可。
ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule |
Ribbon Eager加载
默认情况下Ribbon是懒加载的——首次请求Ribbon相关类才会初始化,这会导致首次请求过慢的问题,你可以配置饥饿加载,让Ribbon在应用启动时就初始化。
ribbon: eager-load: enabled: true # 多个用,分隔 clients: microservice-provider-user |
相关文章
- 跟我学Spring Cloud(Finchley版)-07-Ribbon入门
- Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
- Config Server——使用Spring Cloud Bus自动刷新配置
- Docker容器双向联通与高可用的Eureka Server
- Spring Cloud中,Eureka常见问题总结
相关推荐
良心demo,可以再学习的过程中参考一下,官网的教程是真的需要好好琢磨的,这个可以作为辅助参考,demo采用的版本均为最新版本:springcloud2.0-Finchley.SR1版本,大神提醒我一句学习springcloud不要想的太复杂,...
在分布式系统中,Spring Cloud是实现微服务架构的重要工具,而Spring Cloud ...通过实践这个示例,你可以更深入地理解Spring Cloud Eureka和Ribbon在微服务架构中的角色和价值,为构建自己的分布式系统打下坚实基础。
spring-cloud-starter-netflix-ribbon-1.4.5.RELEASE.jar
基于Spring Cloud Finchley SR2 Spring Boot 2.0.7的最新版本。 核心基础项目内实现类自定义的权限注解,配合RBAC权限模型+拦截器即可实现权限的控制,具体的参考项目中的实现。同时也封装了一些顶层类和结果集等。...
本压缩包"springcloud-learning-master.zip"是一个关于SpringCloud学习的资源合集,包含了一系列的例子和教程,适合想要深入理解和掌握SpringCloud技术的开发者。 首先,我们要了解SpringCloud的基础概念。Spring...
本压缩包“springcloud-learning-master.zip”提供了一套完整的SpringCloud学习资料,包括Eureka、Ribbon、Nacos、SpringCloud以及Feign等多个组件的实践教程。 1. **Eureka**:Eureka是Spring Cloud Netflix项目的...
本篇文章将深入剖析名为"spring-cloud-examples-master"的开发实例包,旨在帮助读者理解并掌握Spring Cloud的核心概念和技术。 首先,Spring Cloud是基于Spring Boot的微服务解决方案,它为开发者提供了在分布式...
下面,我们将深入探讨SpringCloud的关键知识点。 一、SpringCloud基础概念 1. **Eureka**: 服务注册与发现的核心组件,它允许微服务实例向中心节点注册,以便其他服务可以通过中心节点查找并调用。 2. **Zuul**: ...
在这个名为"SpringCloud-2.0-order-hystrix-ribbon-8011.zip"的项目中,我们主要探讨的是如何利用Hystrix实现服务间的短路保护,以及Ribbon作为客户端负载均衡器的作用。 Hystrix是Netflix开源的一款强大的断路器库...
Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...
Spring Cloud Finchley是Spring Cloud的一个重要版本,它提供了一套微服务开发的工具集,用于构建分布式系统,如服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...
spring-cloud-starter-netflix-ribbon-2.1.0.RELEASE
在Spring Cloud框架中,"springcloud-ribbon-feign-hystrix-zuul-config"这个标题涉及到四个关键组件:Ribbon、Feign、Hystrix和Zuul,以及配置管理Config。这些组件都是构建分布式系统时常用的服务发现、客户端负载...
本篇文章将围绕"springcloud-demo-master.zip"这个项目,深入解析其中集成的Ribbon、Netflix Zuul、Eureka等核心组件,帮助读者掌握SpringCloud的实战应用。 首先,"springcloud-demo-master.zip"是一个基于Spring...
spring-cloud-starter-netflix-ribbon-2.2.2.RELEASE
在开发基于Spring Boot和Spring Cloud的应用程序时,经常会遇到各种挑战,其中之一就是“unknown”问题。...总的来说,理解和排查此类问题需要对Spring Boot和Spring Cloud的架构、依赖管理和IDEA的使用有深入理解。
spring-cloud-netflix-ribbon-2.1.0.RELEASE
通过对“Spring-cloud-demo-master”项目的深入研究,你可以逐步理解微服务架构的关键概念,并能够将这些知识应用到实际的项目开发中。同时,注释的详细性将有助于你更好地理解代码逻辑和功能实现,对于初学者来说是...
spring-cloud-netflix-ribbon-2.2.2.RELEASE