SpringCloud-Ribbon、Feign

Ribbon

Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。Ribbon是一个客户端负载均衡器,可以在配置文件中Load Balancer后面的所有机器,支持轮询,随机等多种算法连接这些机器,同时支持自定义的负载均衡算法。

Ribbon和Nginx的区别

服务器端负载均衡Nginx
nginx是客户端所有请求统一交给nginx,由nginx进行实现负载均衡请求转发,属于服务器端负载均衡。既请求有nginx服务器端进行转发。
客户端负载均衡Ribbon
Ribbon是从eureka注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮训负载均衡策略。

Ribbon客户端实现负载均衡

主要核心三个步骤:

  • 服务发现:能够自动发现所依赖服务的列表
  • 服务监听:能够监测到失败的服务,并高效地将失败服务从服务列表中移除
  • 负载均衡策略:能够决定如何在多个服务实例中选择一个有效的服务实例,并进行相应的服务请求处理

@LoadBalanced原理
当给RestTemplate增加了@LoadBalance注解后,LoadBalancerAutoConfiguration就会对该RestTemplate进行处理,在RestTemplate的拦截器列表中添加一个LoadBalancerInterceptor拦截器,当通过RestTemplate进行请求请求时,LoadBalancerInterceptor中的拦截方法就会启动,通过LoadBalancerClient使请求具有负载聚恒功能。

负载均衡调度器

Ribbon组件IRule
默认的是RoundBobinRule(轮询)

常见的负载均衡策略
RetryRule
先按照RoundRobinRule(轮询)的策略获取服务,如果获取的服务失败侧在指定的时间会进行重试,进行获取可用的服务
如多次获取某个服务失败,不会再次获取该服务

RoundRobinRule:轮询策略,默认策略
RandomRule:随机策略
BestAvailableRule:最大可用策略,即先过滤出故障服务实例后,选择一个当前并发请求数最小的。
WeightedResponseTimeRule:带有加权的轮询策略,对各个服务实例响应时间进行加权处理,然后再采用轮询的方式获取相应的服务实例。
AvailabilityFilteringRule:可用过滤策略,先过滤出有故障的或并发请求大于阈值的一部分服务实例,然后再以线性轮询的方式从过滤后的实例清单中选择一个。

@Configuration
public class ConfigBean //boot -->spring   applicationContext.xml --- @Configuration配置   ConfigBean = applicationContext.xml
{ 
	@Bean
	@LoadBalanced
	public RestTemplate getRestTemplate(){
		return new RestTemplate();
	}
	
	@Bean
	public IRule myRule(){
		//return new RoundRobinRule();
		//return new RandomRule();
		return new RetryRule();  //在这里选择负载均衡算法
	}
}

客户端之间的调用使用RestTemplate,不太方便,常配合Feign一起使用

Feign

Spring Cloud对Feign进行了增强,使得Feign支持Spring MVC注解。
支持注解:
@RequestParanm:绑定单个请求参数值
@PathVariable:绑定URI模板变量值
@RequestHeader:绑定请求头数据
@RequestBody:绑定请求的内容区数据并能进行自动类型转换。
使用注解
@FeignClient

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值