深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)
因为在公司最近的项目中,使用的架构是spring-cloud的微服务架构,然后正好公司组织了一次关于spring-cloud的相关的一些技术分享,故在此处将对于spring-cloud 中对于ribbon ,hystrix 和 feign的作用和关系做一个学习记录,以方便以后查看。
Ribbon介绍
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。简单地说,Ribbon是一个客户端负载均衡器。
Ribbon工作时分为两步:第一步先选择 Eureka Server, 它优先选择在同一个Zone且负载较少的Server;第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略,例如轮询、随机、根据响应时间加权等。
ribbon源码的github地址:
https://github.com/Netflix/ribbon
Feign介绍
Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。创建接口,为接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。Spring Cloud为Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka来为使用Feign时提供负载均衡。
feign源码的github地址:
https://github.com/OpenFeign/feign
Hystrix介绍
Hystrix熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。在Spring Cloud Hystrix中实现了线程隔离、断路器等一系列的服务保护功能。它也是基于Netflix的开源框架 Hystrix实现的,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等强大功能。
Hystrix源码的github地址:
https://github.com/Netflix/hystrix
下面我们就来看一下在微服务中,如何快速的使用它们
在一个请求进入到我们系统之后,我们的系统具体是怎么的一个流程来处理的呢?可能每个同学都有自己的理解,下面我画了一个图来比较形象的描述我对于这些组件之间的关系的一个图,有不对的地方,请大家批评指正:
具体使用
代码实现示例
1.工程目录结构
本次我们准备了4个工程模块,分别是:
a.基于spring-boot的服务提供模块:service-demo
b.基于eureka实现的服务注册中心模块:register-demo
c.消费方-配合ribbon和hystrix的模块:consumer-ribbon-with-hystrix-demo
d.消费方-配合feign和hystrix的模块:consumer-feign-with-hystrix-demo
项目结构
2.consumer-ribbon-with-hystrix-demo中的代码说明
pom.xml配置
分别加入了hystrix/ribbon/eureka的pom依赖
user类实体类
user类
RibbonHystrixController类
RibbonHystrixController类
RibbonHystrixService类
RibbonHystrixService类
在这个类中通过注解
@HystrixCommand(fallbackMethod = "fallback")
和实现的fallback方法来实现短路保护
public User fallback(Long id)
启动类
通过注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate() { return new RestTemplate();}
实现调用方的负载均衡
测试实现效果
1.测试准备
a.启动注册中心服务register-demo
效果如下:
表示启动成功
b.在浏览器中访问地址:
http://localhost:8761/
能打开页面,表示启动成功,从图中可以看到,目前没有服务注册进来。
c.我们启动service-demo服务,注意需要启动两次service服务
注意在idea中默认相同的服务,重复启动的话,会覆盖之前的服务,如何启动两个服务呢?请看下图:
点击Edit 菜单
将单列启动的限制勾选去掉,就可以了。注意,需要启动两次,需要修改application.yml文件中的端口号
效果如下:
表示启动成功,并加入到了注册中心。
从图中我们可以看到,在浏览器中已经可以看到注册上来的服务了,并且这个服务有两个节点
d.我们启动写好的consumer-ribbon-with-hystrix-demo服务
效果如下:
2.通过postmain调用接口测试
a.测试调用6次接口
http://localhost:8011/ribbon/2
结果:输出是在每个控制台打印三次日志
b.关掉所有服务的时候,就会走到降级流程中
3.consumer-feign-with-hystrix-demo中的代码说明
这个的配置就不一一阐述,所有工程的代码,请需要的同学从github中下载测试。
在feign中使用hystrix断路器的时候,一定要开启一个配置,如果没有开启的话,默认是关闭的,不会走断路器。
如下图:
代码地址:
Github地址:点击查看
https://github.com/xiangfajun/spring-cloud-microservice-demo
本文参考的文献地址:
http://blog.didispace.com/spring-cloud-starter-dalston-2-3/
http://blog.didispace.com/spring-cloud-starter-dalston-2-2/
http://blog.didispace.com/spring-cloud-starter-dalston-4-1/
http://blog.didispace.com/spring-cloud-starter-dalston-4-2/
http://blog.didispace.com/spring-cloud-starter-dalston-4-3/
http://book.itmuch.com
作者:o大笨象o
链接:https://www.jianshu.com/p/51c5e28c9574
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)相关推荐
- 【springCloud搭建】四、集成ribbon+hystrix+feign
上篇文章传送门:[springCloud搭建]三.集成springCloudGateway网关 ribbon+hystrix+feign所需的第三方包 <!--feign服务通讯组件--> ...
- 初学SpringCloud:探讨一下为什么要使用微服务?,为什么要使用服务注册中心?怎样理解服务注册中心,服务提供者,服务调用者三者之间的关系?
目录 1.本篇博客的背景 2.为什么要使用微服务? 3.为什么要使用服务注册中心 4.怎样理解服务注册中心,服务提供者,服务调用者三者之间的关系? 1.本篇博客的背景 我目前正在学习微服务的一些知识, ...
- python和pycharm之间的关系_浅析python,PyCharm,Anaconda三者之间的关系
一.它们是什么? 1.python Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一 ...
- anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系
一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...
- 世界观、价值观和人生观三者之间的关系
世界观.价值观和人生观三者之间的关系 (1)三者之间是有区别的.世界观是人们对生活于其中的整个世界以及人和外在社会之间的关系的根本观点.根本看法.人生观是对人生的目的.意义和道路的根本看法和态度.内容 ...
- 甲方、乙方、监理三者之间的关系及其在项目管理过程中的若干事项
1.甲方.乙方.监理三者之间的关系 甲方是工程项目的投资单位和受方单位,乙方是工程项目的承建单位和供方单位,监理是工程项目的监管单位和第三方单位.广义方面来讲,监理也属于乙方的范畴,是服务的提供者.从 ...
- service、servlet和WebService三者之间的关系
学习Java很久了,但是一直没怎么弄清楚过service和servlet的区别,下午找了同学聊了聊才发现,一直以来的理解都有错误,下面就为大家好好理清一下他们的关系. 一.service 我们一般理解 ...
- Java笔记-01(Java语言的特性、JDK、JRE、JVM三者之间的关系和Java重点术语)
1.Java语言的特性 1.1.简单性在Java语言当中真正操作内存的是:JVM(Java虚拟机)所有的java程序都是运行在Java虚拟机当中的.而Java虚拟机执行过程中再去操作内存.对于C或者C ...
- 人工智能、机器学习、深度学习及三者之间的关系
导读:什么是机器学习,什么是人工智能,什么是深度学习,这些名词概念我们一直有听说,但是也很容易混淆 这是小编的其他文章,希望对大家有所帮助,点击即可阅读 人工智能常用的十大算法 人工智能数学基础 ...
最新文章
- 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)
- 豆瓣评分9.4!这部大片你不应该错过,每一秒都是不敢看的残忍!
- nginx下gzip配置参数详解
- pytorch根据特征图训练LSTM Stacked AutoEncoder
- 信息安全风险评估项目工序与流程
- taobao淘宝 开源的项目tair 简介
- 数据结构上机实践第四周项目6- 循环双链表应用
- 利用bug来进行调试
- C++11 | 正则表达式(4)
- CmsEasy可视化编辑商城系统源码
- java 缓存队列_双缓冲队列的java实现
- 概率论 —— 泊松分布和指数分布
- 为什么 Go 语言能在中国这么火?
- 用户授权中@Secured,@PreAuthorize,@PostAuthorize,@PreFilter,@PostFilter这五个注解的使用
- 全球卫星导航系统(GNSS)相关概念总结
- SQL 压力测试实战
- 爬虫(python)—下载技巧
- java之getResource方法
- Go安装、配置和vsCode配置Go
- 大数据分析:结合 Hadoop或 Elastic MapReduce使用 Hunk
热门文章
- 计算机网络实验第一周,新学期计算机网络实训报告范文
- 26 Java GC算法 垃圾收集器、标记 -清除算法、复制算法、标记-压缩算法、分代收集算法
- 40_pytorch Batch Norm
- 07_clickhouse、自定义分区及底层存储合并机制、自定义分区键、分区目录的命名规则、分区目录的合并过程、分区目录的合并过程、分区表达式指定、分区案例
- Clickhouse安装及使用/clickhouse-mysql安装
- Flink流计算编程--在WindowedStream中体会EventTime与ProcessingTime
- HDFS权限设置 \ HDFS涉及ACLs的命令
- caffe使用过程+digits在windows下的安装和运行
- Mac免费使用MAMP搭建本地开发环境
- ElasticSearch PPT-笔记