Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。
主要包括六个组件:
1、ServerList,负载均衡使用的服务器列表。这个列表会缓存在负载均衡器中,并定期更新。当 Ribbon 与 Eureka 结合使用时,ServerList 的实现类就是 DiscoveryEnabledNIWSServerList,它会保存 Eureka Server 中注册的服务实例表。
2、ServerListFilter,服务器列表过滤器。这是一个接口,主要用于对 Service Consumer 获取到的服务器列表进行预过滤,过滤的结果也是 ServerList。Ribbon 提供了多种过滤器的实现。
3、IPing,探测服务实例是否存活的策略。
4、IRule,负载均衡策略,其实现类表述的策略包括:轮询、随机、根据响应时间加权等。
5、ILoadBalancer,负载均衡器。这也是一个接口,Ribbon 为其提供了多个实现,比如 ZoneAwareLoadBalancer。而上层代码通过调用其 API 进行服务调用的负载均衡选择。
6、RestClient,服务调用器。
主要负载均衡策略:
1、com.netflix.loadbalancer.RoundRobinRule:轮询,这是默认的策略。
2、com.netflix.loadbalancer.RandomRule:随机
3、com.netflix.loadbalancer.RetryRule:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server
4、com.netflix.loadbalancer.WeightedResponseTimeRule:加权响应时间。根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。
5、com.netflix.loadbalancer.ZoneAvoidanceRule:区域感知轮询。复合判断server所在区域的性能和server的可用性选择server
6、com.netflix.loadbalancer.AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server。
7、com.netflix.loadbalancer.BestAvailableRule:选择一个最小的并发请求的server,逐个考察Server,如果Server被tripped了,则忽略
启动类:
@EnableEurekaClient // @RibbonClient(name="service-provider-1", configuration=DefaultRibbonConfiguration.class) @SpringBootApplication public class Main { @Bean @LoadBalanced //添加负载均衡支持,默认策略是轮询 public RestTemplate getRestTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
Controller类:
@RestController public class UserController { @Autowired private RestTemplate restTemplate; @GetMapping("/user/{id}") public String addUser(@PathVariable Long id){ //服务提供者的接口地址:此处用 spring.application.name 属性值 String url = "http://service-provider-1/user/" + id; //通过RestTemplate对象调用接口 String result = restTemplate.getForObject(url, String.class); return result; } }
通过自定义Ribbon更改默认的负载均衡策略,有以下两种方式:
1、通过代码自定义Ribbon
创建Ribbon配置类
/** * 自定义Ribbon配置类 * * 该配置类不能被@ComponentScan扫描到,否则配置信息就会被所有 @RibbonClient 共享 * Ribbon默认配置类是 RibbonClientConfiguration */ @Configuration public class DefaultRibbonConfiguration { @Bean public IRule ribbonRule(){ IRule rule = new RandomRule(); return rule; } }
在启动类中使用 @RibbonClient 或 @RibbonClients 注解为服务提供者指定Ribbon配置类
@RibbonClient(name="service-provider-1", configuration=DefaultRibbonConfiguration.class)
2、使用配置文件自定义Ribbon
在application.properties文件中添加以下配置信息
service-provider-1.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule
相关推荐
本文主要探讨了在SpringCloud中如何使用Ribbon和Feign作为服务消费者的组件,以及它们背后的负载均衡原理。首先,理解服务间通信的基础是HTTP协议,而注册中心Eureka则负责维护服务实例的列表。 Ribbon和Feign都是...
3. 创建RestTemplate或FeignClient实例,指定要调用的服务名,Ribbon会自动在后台处理负载均衡。 4. 当发起请求时,Ribbon会根据配置的负载均衡策略选取一个服务实例进行调用。 例如,使用Ribbon的轮询策略,每次...
Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等...
:路由网关Gateway+自定义路由过滤【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,consume是ribbon+restTemplate。gateway是网关的...
在本项目"spring boot ribbon-consumer"中,我们将探讨如何使用Ribbon作为客户端负载均衡器来实现微服务架构中的消费者服务。Ribbon是Netflix开源的一套客户端负载均衡工具,它可以与Eureka、Zookeeper等服务发现...
4. **配置Ribbon**: 在需要调用其他服务的微服务中,引入Ribbon配置,并在RestTemplate或Feign配置中指定Ribbon的负载均衡策略。 5. **实现服务调用**: 使用配置好的RestTemplate或Feign客户端,通过服务ID调用其他...
在本篇学习笔记中,我们将深入探讨如何在Spring Cloud框架下使用RestTemplate和Ribbon来消费服务。Spring Cloud是基于Spring Boot实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、...
- 使用Ribbon + restTemplate 或 Feign 来调用服务提供者的接口。 通过这种方式,Spring Cloud 构建的微服务框架可以实现服务的发现、注册、调用以及负载均衡,从而构建出一个高度可扩展和容错的分布式系统。此外...
springCloud学习【一】:服务的注册发现与消费【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,consume是ribbon+restTemplate。...
5. **使用RestTemplate或Feign**:Spring Cloud提供了`RestTemplate`增强版,内置了Ribbon的支持,可以直接用来调用服务提供者。另外,Feign是声明式的HTTP客户端,也可以和Ribbon结合使用,提供更简洁的接口调用...
【Ribbon服务消费者】 在Spring Cloud的生态系统中,Ribbon是作为Netflix的子项目出现,主要功能在于提供客户端的负载均衡器。它被设计用于在微服务架构中,当一个服务需要调用其他服务时,确保请求能均匀分布到...
:服务熔断:Hystrix容错框架【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,consume是ribbon+restTemplate。解压完之后,配置好...
在实际使用Spring Cloud Ribbon时,我们需要在配置文件中指定服务实例的ID(服务名),然后在需要调用远程服务的地方注入`IRestTemplate`或`LoadBalancerClient`,通过它们来发起请求。`IRestTemplate`是基于HTTP的...
5. **使用RestTemplate或Feign**:在服务消费者中,我们可以使用Spring的`RestTemplate`或者Feign来发起对服务提供者的请求。Ribbon会自动注入负载均衡器,根据设定的策略选择服务实例。 6. **服务调用**:在发起...
"Spring Boot使用RestTemplate消费REST服务的几个问题记录" 本文主要介绍了Spring Boot使用RestTemplate消费REST服务的几个问题记录,记录了在使用RestTemplate调用REST服务时遇到的问题和解决方案。下面是相关知识...
- 创建服务消费者(Consumer),配置Ribbon,使用@LoadBalanced RestTemplate或Feign调用Provider的服务。 - 编写测试代码,验证负载均衡的效果,如轮询调用多个服务实例。 7. **Ribbon扩展** - **Hystrix断路器...
总的来说,Ribbon作为Spring Cloud生态的一部分,为服务消费者提供了强大的负载均衡功能,简化了微服务架构中的服务间通信。通过与RestTemplate或其他客户端库的结合,Ribbon能够在保持代码简洁的同时,实现高效的、...
4. 服务消费者的业务逻辑:可能包含`RestTemplate`或`FeignClient`的使用,它们会在Ribbon的辅助下,自动进行负载均衡的HTTP请求。 在`https://blog.csdn.net/zhizhuodewo6/article/details/81905865`这篇文章中,...
2. 使用Ribbon客户端:通过`@LoadBalanced`注解修饰RestTemplate或Feign客户端,Ribbon会自动在每次请求时选择一个可用的服务实例。 3. 自定义负载策略:Ribbon提供了多种负载均衡策略,如轮询、随机、最少连接数等...
1. **服务列表获取**:客户端(使用Ribbon的服务消费者)首先从Eureka获取到目标服务的所有实例列表。 2. **负载策略选择**:Ribbon内置了多种负载均衡策略,如轮询(Round Robin)、随机(Random)、最短响应时间...