首页 > 资讯 > 正文
spring cloud的feign、ribbon和hystrix
来源:网络 阅读量:


在Spring cloud 中服务之间通过restful方式调用有两种方式:restTemplate+Ribbon 和feign方式
 
feign 和 ribbon 是 Spring Cloud 的 Netflix 中提供的两个实现软负载均衡的组件,Ribbon 和 Feign 都是用于调用其他服务的,方式不同。
 
Ribbon
Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡器。它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载。使用 HttpClient 或 RestTemplate 模拟 http 请求,比较麻烦。
 
ribbon是服务之间的负载均衡,zuul是可以对外部请求做负载均衡。
 
Feign
Feign 是在 Ribbon 的基础上进行了一次改进,整合了ribbon,是一个使用起来更加方便的 HTTP 客户端。采用接口加注解的方式 ,将需要调用的其他服务的方法定义成抽象方法即可, 不需要自己构建 http 请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写 客户端变得非常容易。
 
Feign是伪RPC客户端(本质还是用http)
 
注意:spring-cloud-starter-feign 里面已经包含了 spring-cloud-starter-ribbon(Feign 中也使用了 Ribbon)
 
 
feign、ribbon和hystrix的超时问题
hystrix的超时时间 (一般情况下ribbon 的超时时间(<)hystrix的超时时间(因为涉及到ribbon的重试机制) )
 
hystrix的超时时间要大于 (1 + MaxAutoRetries + MaxAutoRetriesNextServer) * ReadTimeout 比较好,具体看需求进行配置。
 
Ribbon超时与Hystrix超时问题,为了确保Ribbon重试的时候不被熔断,我们就需要让Hystrix的超时时间大于Ribbon的超时时间,否则Hystrix命令超时后,该命令直接熔断,重试机制就没有任何意义了。
 
如果在一个微服务当中对同一个接口同时配置了Hystrix与ribbon两个超时时间,则在接口调用的时候,两个计时器会同时读秒。
 
比如,访问一个接口需要2秒,你的ribbon配置的超时时间是3秒,Hystrix配置的超时时间是1秒。
 
在这种情况下,程序会回调进入到Hystrix的fallback方法,因为在访问接口的时候,Hystrix与ribbon的两个计时器同时计时,而在Hystrix计时器结束的时候自动停止了访问进行回调,进入fallback方法。
 
在这个地方建议配置Hystrix的超时时间要大于ribbon的超时时间,否则会在接口调用还未完成的时候直接进入回调方法。
 
Hystrix与ribboin的超时时间默认为1秒,所以超时配置一般需要手动配置,如果不配,接口响应稍慢就会熔断。


spring cloud

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.link66.cn/news/3189.html