因为在公司最近的项目中,使用的架构是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是一个声明式的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熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。在Spring Cloud Hystrix中实现了线程隔离、断路器等一系列的服务保护功能。它也是基于Netflix的开源框架 Hystrix实现的,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等强大功能。
Hystrix源码的github地址:
https://github.com/Netflix/hystrix
下面我们就来看一下在微服务中,如何快速的使用它们
在一个请求进入到我们系统之后,我们的系统具体是怎么的一个流程来处理的呢?可能每个同学都有自己的理解,下面我画了一个图来比较形象的描述我对于这些组件之间的关系的一个图,有不对的地方,请大家批评指正:
具体使用
本次我们准备了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
项目结构
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.关掉所有服务的时候,就会走到降级流程中
这个的配置就不一一阐述,所有工程的代码,请需要的同学从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/
Original url: Access
Created at: 2019-11-22 11:45:41
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论