当前位置: 首页 > news >正文

springcloud 服务调用feign、熔断hystrix、网关gateway

回归cloud的学习,对于springcloud的架构与原理以及性能的分析我们都在之前的文章里写过:

springcloud架构的认识

我们之前测试过eureka服务注册功能,它能很好的保存服务之间的通讯关系,是维系微服务通讯网之间的电话本,同时也能够以心跳检测的形式监听每一个微服务的生命状态,对于结点进行很好的监控。那么我们今天的服务调用就是将接口变得易于管理,更简单的去调用分布式系统内的微服务。而对于同一时间大量调用的某一个微服务来说它的压力是巨大了,但是出于用户体验的原因,我们必须对用户返回什么,对前端给出一个响应,而不是挂出404或者非常慢的响应。那么熔断降级的处理就是非常合适的做法。另外我们对于分布式调用微服务的形式也应、配置一个类似于nignx之类的主机进行反向的分发。在我们的cloud生态立提供了gateway网关组件去实现请求的分发与微服务路由的管理。

那么就让我们用上次测试eureka的项目进行测试:

首先是利用feign组件实现服务调用与熔断降级(这里的熔断可以自行去配置,默认是超过1秒没给出响应就返回熔断的降级响应):

  <!--引入feign服务调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

以上是feign的依赖,我们之前的项目采取的是父工程pom继承体系,便于管理公共依赖。

/*开启服务调用Feign的使用*/
@EnableFeignClients

在orderApplication类上打上开启feign服务组件的注解。

这里先介绍如何使用feign实现简单的微服务调用:

我们需要有接口作为一个product服务调用的客户端(可以含有很多这样的客户端,便于管理不同的微服务调用接口)当前我们是order模块:

/*对应调用的微服务名称*/
@FeignClient(name = "product")
public interface FeignInterface {/*对应微服务的访问路径*/@GetMapping("/product/{id}")Product findById(@PathVariable("id")int id);
}

然后我们就可以利用自动注入的形式在controller里优化接口了:

    @Autowiredprivate FeignInterface feignInterface;@GetMapping("/buyByFeign/{id}")public Product getProductByFeign(@PathVariable("id") int id) {return feignInterface.findById(id);}

细心的同志可以看到之前的controller接口是这样的:

    @Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)public Product getProductById(@PathVariable("id") int id) {return restTemplate.getForObject("http://product/product/" + id, Product.class);}

两相对比,我们发现feign服务调用的形式完全不需要写任何请求语句,也不需要处理与product微服务之间的响应。浏览器访问时依旧按照order接口上的路径去写即可。

其次介绍一下feign实现的熔断:

我们对某一个微服务调用路线准备熔断:举个例子,本文主要是order与product模块之间的调用关系,因此熔断也就是处理从order到product模块之间的请求路线:

下一个实现类去实现feign服务调用接口实现的方法就是我们的熔断方法(注意这里开启熔断器服务的注解也需打在orderApplication类上,在下面介绍hystrix时会给出来):

@Component("feignHystrix")
public class FeignHystrix implements FeignInterface{public Product findById(int id) {Product product = new Product();product.setId(-1);product.setProductName("服务熔断");return product;}
}

要打上spring组件注解交给spring管理,不然跑起来就是一个没有实例化的字节码文件,根本用不了。

其次我们需要告诉feign客户端,你这条调用线路的熔断降级处理类型:

@FeignClient(name = "product",fallback = FeignHystrix.class)
public interface FeignInterface {@GetMapping("/product/{id}")Product findById(@PathVariable("id")int id);
}

fallback = FeignHystrix.class就是确定熔断降级类型的配置。

这样的方式就可以实现feign的服务调用与熔断降级了。但是会出现直接就是熔断方法的响应,原因是在controller层的自动注入会直接默认你注入的是接口的实现类型,这里我们最好是绑定一下name。

其次我们来换一种熔断处理,也就是利用hystrix去实现服务调用关系间的熔断处理:

        <!--引入服务熔断hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><version>2.2.10.RELEASE</version></dependency>

以上是它的依赖,hystrix组件用起来也是十分的简单,会对你的要求进行不同的配置,这里本文只展示最基本的使用举例:

/*开启熔断器*/
@EnableCircuitBreaker

记住在Application类上开启熔断器才行,基本的使用十分简单就是直接在controller接口类里这么写就可以:

    @Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/buy/{id}", method = RequestMethod.GET)@HystrixCommand(fallbackMethod = "getProductFallBack") //给接口配置hystrix熔断降级方法public Product getProductById(@PathVariable("id") int id) {try {Thread.sleep(2000);} catch (InterruptedException e) {System.out.println("睡两秒等熔断");}return restTemplate.getForObject("http://product/product/" + id, Product.class);}/*hystrix降级方法必须与熔断方法保持一致参数,一致返回类型*/public Product getProductFallBack(int id) {Product product = new Product();product.setId(-1);product.setProductName("服务熔断");return product;}

注意这个降级的方法是有要求的,参数类型与返回值要与接口方法一致。你也可以建立一个新的类型里面统一的书写降级方法,调用时配置上类型与方法的路径即可(默认是1秒不给响应就采取熔断降级,所以直接开线程睡2秒测试熔断响应)。

注册中心与服务发现可以使得微服务之间鸽子能够查询到各自的存在,不需要开发者手动的配置各个微服务的路由。服务调用与熔断降级有效的将微服务之间的调用与流量的压力进行了管控与优化,但是由客户端或者是浏览器发送来的请求如果还是直接ip加端口加访问路径的话,未必就太麻烦了?这样对于前端开发来说也是很大的痛点!所以nignx反向代理很受欢迎,也是采用一个nignx.conf文件作为内部系统服务接口的通讯录,外部请求统一ip与端口只需要给我你想要访问的服务名称我就可以帮你通讯。这也就是网关的基本功能。当然如果简单的路由分发nignx完全可以充当网关的角色,这里我们先介绍一下gateway组件的基本使用:

         <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

以上是gateway的依赖,我们需要前置知道的是gateway与spring web有冲突,所以最好不要安装web的依赖,如果和我一样是父工程pom管理的可以在application.yml文件配置这一项解决冲突:

spring:application:name: gatewaymain:web-application-type: reactive

其次就是网关的配置信息了(你不需要写任何类型文件,只需要浅浅的配置一下yml文件):

spring: cloud:gateway:routes:- id: orderuri: http://127.0.0.1:9002predicates:- Path=/order/**- id: producturi: http://127.0.0.1:9001predicates:- Path=/product/**

这个routers像极了view项目里我们书写的router.js里的routes[]数组的内容,微服务注册名称,微服务内部访问路径,微服务默认的访问入口(这里的入口是controller类型上打的@RequestMapping内容,后面的二级三级就是我们需要填写访问的)举个例子(gateway默认的端口是8080)我们现在需要访问order微服务的buy/1去查1号商品,之前我们的访问方式是:http://127.0.0.1:9002/order/buy/1

现在配置完以上的网关内容后我们只需要访问localhost:8080/order/buy/1(注意这个order是代表微服务名称,也就是你配置的id,可不是controller类型的一级路由)。

相关文章:

springcloud 服务调用feign、熔断hystrix、网关gateway

回归cloud的学习&#xff0c;对于springcloud的架构与原理以及性能的分析我们都在之前的文章里写过&#xff1a;springcloud架构的认识我们之前测试过eureka服务注册功能&#xff0c;它能很好的保存服务之间的通讯关系&#xff0c;是维系微服务通讯网之间的电话本&#xff0c;同…...

《C++ Primer》 第十二章 动态内存

《C Primer》 第十二章 动态内存 动态内存与智能指针 shared_ptr允许多个指针指向同一个对象&#xff1b;unique_ptr则“独占”所指向的对象&#xff0c;weak_ptr指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 shared_ptr类&#xff1a;默认初始化的智能…...

多个关键字用or、and、包含、不包含动态拼接为正则表达式和SQL查询条件

目录前言校验思路1、存储方式2、实现图一实现图二实现结果最后前言 不知道大家有没有做过这种需求&#xff1a;在某字符串中&#xff0c;根据多个关键字去判断这串字符串是否满足条件。如下图&#xff1a; 亦或是 如果说要根据图二的关键字去数据库中查询符合条件的数据&a…...

初始Linux操作系统

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…...

【算法数据结构体系篇class12、13】:二叉树

一、判断二叉树是否是完全二叉树/*** 判断二叉树是否是完全二叉树** //判断层序遍历过程如果节点有右子树 没有左子树 那么就不是完全二叉树* //判断层序遍历过程如果遇到第一个节点是没有左或右子树的&#xff0c;也就是只有一个子节点或者没有&#xff0c;那么再往后层序遍历…...

数字IC手撕代码--联发科(总线访问仲裁)

题目描述当A、B两组的信号请求访问某个模块时&#xff0c;为了保证正确的访问&#xff0c;需要对这些信号进行仲裁。请用Verilog实现一个仲裁器&#xff0c;对两组请求信号进行仲后&#xff0c;要求&#xff1a;协议如图所示&#xff0c;请求方发送req&#xff08;request&…...

白盒测试复习重点

白盒测试白盒测试之逻辑覆盖法逻辑覆盖用例设计方法1.语句覆盖2.判定覆盖(分支覆盖)3.条件覆盖4.判定条件覆盖5.条件组合覆盖6.路径覆盖白盒测试之基本路径测试法基本路径测试方法的步骤1.根据程序流程图画控制流图2.计算圈复杂度3.导出测试用例4.准备测试用例5.例题白盒测试总…...

学习C++这几个网站足矣

文章目录cppreferencecplusplusquick-bench[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[A…...

第十四届蓝桥杯模拟赛(第三期)——C语言版

1.找最小数 问题描述: 请找到一个大于 2022 的最小数&#xff0c;这个数转换成十六进制之后&#xff0c;所有的数位&#xff08;不含前导 0&#xff09;都为字母&#xff08;A 到 F&#xff09;。 请将这个数的十进制形式作为答案提交。 #include <stdio.h> int main(…...

Flutter Button 实例

大家好&#xff0c;我是 17。 在上篇文章 使用 Flutter Button 介绍了如何修改 button 的样式&#xff0c;本文来具体实践一下。 本文列举一些常用的 button 效果&#xff0c;以便在用到的时候方便使用。因为 ElevatedButton 最常用&#xff0c;所以大多以 ElevatedButton 举…...

好玩的docker项目,盒子刷的海思nas,挂载外接硬盘。qb种子

玩法思路(5条消息) 群晖qb下载&#xff0c;tr辅种_屿兮的博客-CSDN博客_群晖辅种qbittorrent简介及设置_哔哩哔哩_bilibiliqb下载器下载Transmission最好用的BT(PT)下载神器/超简单上手教你在NAS轻松部署/告别简陋三步让你升级全中文最新Web界面&#xff08;BT下载/PT下载/NAS/…...

RabbitMQ的使用

1.初识MQ1.1.同步和异步通讯微服务间通讯有同步和异步两种方式&#xff1a;同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不…...

Selenium如何隐藏浏览器页面?

Selenium隐藏浏览器页面 背景 在工作&#xff0c;学习中&#xff0c;我们常常会使用selenium来获取网页上的数据&#xff0c;编完完整程序之后&#xff0c;实现真正意义上的自动化获取&#xff0c;此时我们会发现在运行中往往会弹出浏览器页面&#xff0c;在调试过程中&…...

基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离

基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离 本文想基于Ant DesignPro Vue构建的前端SpringBoot实现的后端接口服务&#xff0c;实现前后端分离开发和独立运行&#xff0c;业务场景是登录认证&#xff0c;认证成功后返回该用户相应权限范围内可见的…...

Acwing---843. n-皇后问题

n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n&#xff0c;请你输出所有的满足条件的棋子摆法。 …...

彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏

作为C/C开发人员&#xff0c;内存泄漏是最容易遇到的问题之一&#xff0c;这是由C/C语言的特性引起的。C/C语言与其他语言不同&#xff0c;需要开发者去申请和释放内存&#xff0c;即需要开发者去管理内存&#xff0c;如果内存使用不当&#xff0c;就容易造成段错误(segment fa…...

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测

自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测 目前目标检测算法有很多&#xff0c;流行的就有faster-rnn和yolov&#xff0c;本文使用了几年前的yolov3框架进行训练&#xff0c;效果还是很好&#xff0c;当然也可以使用更高版本的Yolov进行实战。本代码使…...

flink兼容性验证

flink介绍&#xff1a;https://blog.csdn.net/weixin_43563705/article/details/107604693 一、安装启动 安装flink及其依赖 yum install java-1.8.0-openjdk curl tar mkdir -p /usr/local/flink wget https://mirrors.aliyun.com/apache/flink/flink-1.16.1/flink-1.16.1-bi…...

智慧工厂数字孪生可视化监测系统有效提升厂区安全管控效力

我国制造业正处于产业升级的关键时期&#xff0c;基于数据进行生产策略制定与管理是大势所趋&#xff0c;而数据可视化以更直观的方式成为数据分析传递信息的重要工具。 深圳华锐视点通过三维可视化手段对工厂各类设备进行三维建模&#xff0c;真实复现设备设施外观、结构、运转…...

c++中基本类型详细解释外加基本运算规则

&#x1f440;&#x1f440;#c中包括算数类型和空类型。 类型含义wchat_t宽字符bool布尔类型char字符chat16_tunicode字符chat_32unicode字符short短整型int整形long长整型longlong长整型float单精度浮点型double双精度浮点型longdouble扩展精度浮点型 &#x1f440;&#x1f…...

扬帆优配“机器人+”方案加码产业发展,这些股有望高增长

“机器人”发明新需求&#xff0c;2022年中国机器人市场规模约为174亿美元。 美国时刻3月1日&#xff0c;特斯拉在得克萨斯州超级工厂举办投资者日活动&#xff0c;展示了人形机器人Optimus的视频&#xff0c;更夸大的是&#xff0c;视频中的机器人好像在制作另一个机器人&…...

推送投票制作微信推送里投票制作教程在线投票活动制作

近些年来&#xff0c;第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放&#xff0c;更多人选择微信投票小程序平台&#xff0c;因为它有非常大的优势。1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…...

【架构师】跟我一起学架构——微服务分层监控

博客昵称&#xff1a;架构师Cool 最喜欢的座右铭&#xff1a;一以贯之的努力&#xff0c;不得懈怠的人生。 作者简介&#xff1a;一名Coder&#xff0c;软件设计师/鸿蒙高级工程师认证&#xff0c;在备战高级架构师/系统分析师&#xff0c;欢迎关注小弟&#xff01; 博主小留言…...

Linux:https静态网站搭建案例

目录介绍httpshttps通信过程例介绍https 整个实验是在http实验基础上进行的 因为http协议在传输的时候采用的是明文传输&#xff0c;有安全隐患&#xff0c;所以出现了https&#xff08;安全套接字层超文本传输协议&#xff09; HTTPS并不是一个新协议&#xff0c; 而是HTTP…...

前端css整理

如何水平垂直居中一个盒子&#xff1f; 1.已知高度&#xff1a;子盒子设置 display: inline-block; 父盒子设置 line-height 等于高度实现垂直居中&#xff1b;使用 text-align:center实现水平居中 2.父盒子 display:flex; align-items:center;justify-content:center; 3.定位&…...

混凝土搅拌站远程监控解决方案

一、项目背景 随着大规模的基础设施建设&#xff0c;对混凝土搅拌设备的需求量日益增加&#xff0c;对其技术指标的要求也日益提高&#xff0c;其技术性能将直接关系到工程的质量和使用寿命。而混凝土生产的质量是在生产过程中形成的&#xff0c;而非最终强度的检测。混凝土生…...

Spark SQL 学习总结

文章目录&#xff08;一&#xff09;Spark SQL&#xff08;二&#xff09;SParkSession&#xff08;三&#xff09;DataFrame常见算子操作&#xff08;四&#xff09;DataFrame的sql操作&#xff08;五&#xff09;RDD转换为DataFrame&#xff08;1&#xff09;反射方式&#x…...

深度学习 - 37.TF x Keras Deep Cross Network DCN 实现

目录 一.引言 二.模型简介 1.Embedding and stacking layer 2.Cross Network 2.1 模型架构分析 2.2 计算逻辑...

Ubuntu中使用Synaptic进行包管理

Synaptic概况 Synaptic 是一个轻量级的 apt 软件包管理器系统的 GUI 前端&#xff0c;所有你可以在终端中使用 apt-get 命令来做的事&#xff0c;都可以通过 Synaptic 来实现。优势 图形化安装界面&#xff0c;同时可以安装配置相关依赖&#xff0c;避免由于依赖问题导致的各类…...

python之selenium库安装及用法(定位法、获取文本、文本框输入、鼠标点击、滑动滚动条)

一、selenium库安装 pip install selenium二、浏览器驱动安装 谷歌浏览器驱动下载地址&#xff1a;https://chromedriver.storage.googleapis.com/index.html 根据你电脑的谷歌浏览器版本&#xff0c;下载相应的就行。我下载的是110.0.5481.XX中的chromedriver_win32.zip 下载…...

如何做内部优惠券网站/网页制作源代码

hadoop distcp -i hdfs://192.168.10.211:9000/fileinfo hdfs://192.168.24.46:9000/fileinfo distcp [OPTIONS] <srcurl>* <desturl> -i Ignore failures 转载于:https://www.cnblogs.com/yanghuahui/p/3490713.html...

桥梁毕业设计代做网站/竞价托管代运营多少钱

Spread.NET 是一个功能、布局与 Excel 高度类似的 .NET表格控件&#xff0c;可全面满足 WinForm、ASP.NET、XAML 和 WinRT 等平台下表格数据处理、数据可视化开发需求。Spread.NET 支持 462 种 Excel 公式&#xff0c;提供可嵌入系统的类Excel设计器和全面开放的 API&#xff0…...

汕头免费建设网站制作/百度网盘app怎么打开链接

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447;转自 | 募格学术参考资料 | 抖音陈见夏夏&#xff08;求关注版、秒闻视频、募格学术读者投稿、留言、微博、知乎等。试问谁没有为导师的论文批注心跳加速过呢&#xf…...

网站如何做sem优化/百度网盘seo优化

概述&#xff08;TCP/IP协议是一个协议族&#xff09;&#xff1a; TCP/IP 协议按照四层怎么划分&#xff1a;链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;应用层&#xff08;实际上是四层&#xff09; TCP/IP 协议按照七层怎么划分&#xff1a;物理层&#xff0c;…...

品牌网站建设解决/外贸网站模板

危险函数 mixed eval (string $code) 把字符串作为PHP代码执行bool assert (mixed $assertion [,string $description]) 替代eval函数。相同功能。mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject[,int $limit-1 [,int&$count]])/e修正符使preg_rep…...

怎么免费做网站视频教学/企业网站的作用有哪些

前言 作为一个3-5年的Android工程师&#xff0c;我们经常会遇到这些瓶颈&#xff1a; 1.技术视野窄 长期在小型软件公司&#xff0c;外包公司工作&#xff0c;技术视野被限制的太厉害 2.薪资提升难 初中级Android岗位薪资上升空间有限&#xff0c;基本上你想拿15k以上&#…...