SpringCloud-Netflix学习笔记11——Hystrix实现服务降级

news2024/12/23 8:04:07

服务降级

是什么?

  整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。

  如下图,在某一个时间段,访问服务A的请求特别多,而访问服务B和服务C的请求特别少,这时我们可以把服务B和服务C先关闭,等到度过此时间段,在把他们开启回来。

  把服务关闭之后,用户如果访问该服务应该怎么办呢?
  如果直接把服务关闭不进行任何处理的话,用户访问该服务的时候,就会发生500代码错误。而我们Hystrix的服务降级功能,可以对用户的请求进行一些处理。就是预先写好一个失败回调类,如果访问已经关闭的服务,就会进入该失败回调类,响应给用户一些预先写好的信息,比如 “该服务已关闭” 等。

  虽然看起来作用不是很大,但是可以让客户端看到正常的信息,而不是代码500,增加用户的体验。

在这里插入图片描述

具体实例

  1、在Feign实现负载均衡的 DeptClientService 的基础上,为他写一个失败回调类,命名 DeptClientServiceFallbackFactory ,如下:

在这里插入图片描述

  2、失败回调类需要继承 FallbackFactory 类,并且重写 create 方法,方法返回值为 DeptClientService 接口 ,方法中返回 DeptClientService 接口的实现,我这里只写了一个函数的返回代码,其他函数也是类似,代码如下:

//失败回调方法
@Component
public class DeptClientServiceFallbackFactory implements FallbackFactory {
    @Override
    public DeptClientService create(Throwable throwable) {
        return new DeptClientService() {
            @Override
            public Dept queryById(Long id) {
                return new Dept()
                        .setDeptno(id)
                        .setDname("id=>" + id + "没有对应的信息,客户端提供了降级的信息,这个服务现在以及被关闭")
                        .setDbSource("没有数据");
            }

            @Override
            public boolean addDept(Dept dept) {
                return false;
            }

            @Override
            public List<Dept> queryAllDept() {
                return null;
            }
        };
    }
}

  3、在 DeptClientService 接口的 @FeignClient 注解中,加一个属性 fallbackFactory ,值为 失败回调方法的名字.class,如下:

@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT" ,fallbackFactory = DeptClientServiceFallbackFactory.class)  //通过服务名获取注册中心的服务

  4、在 springcloud-consumer-dept-feign 的配置文件中开启服务降级。

# 开启hystrix服务降级
feign:
  hystrix:
    enabled: true

  5、现在可以开启 springcloud-consumer-dept-feign 、springcloud-eureka-7001、springcloud-provider-dept-8001进行测试。

具体流程

  将服务开启,可以正常访问服务的信息;将服务关闭再访问服务的话,会进入失败回调类,返回预先写好的提示信息给用户。此时服务端provider已经down了,但是我们做了服务降级处理,让客户端在服务端不可用时也会获得提示信息而不会挂起耗死服务器。

总结

  服务熔断:一般是某个服务故障或者异常引起,类似现实世界中的 “保险丝” , 当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时!

  服务降级:所谓降级,一般是从整体负荷考虑,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实战打靶集锦-004-My-Cmsms

**写在前面&#xff1a;**记录一次艰难曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 WEB服务探查4.1.1 浏览器访问4.1.2 目录枚举4.1.3 控制台探查4.1.4 其他目录探查4.2 阶段小结5. 公共EXP搜索5.1 CMS搜索5.2 Apache搜索5.3 PHP搜索5.4 MySQL搜索5…

DaVinci:色度 - 亮度网格

调色页面&#xff1a;色彩扭曲器 Color&#xff1a;Color Warper相对于色相 - 饱和度网格&#xff0c;色度 - 亮度 Chroma - Luma网格在颜色的亮度控制上更加灵活。◆ ◆ ◆工作原理分析色度 - 亮度网格来自色彩空间三维模型中圆柱体垂直切分的两个 90 交叉的纵向平面。网格上…

介绍架构分类、设计及架构师工作

title: 介绍架构分类、设计及架构师工作 date: 2019-06-07 13:49:00 tags: 架构分类架构设计功能设计架构师 categories:架构 介绍 本文从理论上分析、梳理架构相关知识&#xff0c;帮助自己更好的理解架构工作。 什么是架构和架构分类 什么是架构 关于架构的定义业界有太多…

致敬白衣天使,学习Python读取

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、c 主页&#xff1a;阿玥的小东东 故事设定&#xff1a;现在学校要求对所有同学进行核酸采集&#xff0c;每位同学先在宿舍内等候防护人员&#xff08;以下简称“大白”&#xff09;叫号&#xff0c;叫到自己时去停车场排…

JDK 8 JVM内存结构详解

前言 本文所介绍的是 JDK 1.8 版本&#xff0c;其他版本的 JDK 在这里并不一定正确&#xff1b;内容主要摘自周志明的《深入理解Java虚拟机》一书的关键点&#xff0c;并根据自身的理解进行记录。感兴趣的同学可以去阅读原著。 JVM 的内存结构&#xff0c;主要包括以下 5 个区…

Jupyter 插件配置和主题设置

Jupyter 插件配置和主题设置 前提需要暗转Anaconda 或者系统已有Jupyter。 即使想在conda 虚拟环境中使用Jupyter 也不用在虚拟环境中重新安装和配置Jupyter相关包。 在base环境中&#xff0c;下载插件管理包&#xff1a; pip install jupyter_contrib_nbextensions -i htt…

开源项目 —— 原生JS实现斗地主游戏 ——代码极少、功能都有、直接粘贴即用

目录 效果如下 目录结构 GameEntity.js GrawGame.js konva.min.js PlayGame.js veriable.js index.html 结语&#xff1a; 前期回顾 卡通形象人物2 写代码-睡觉 丝滑如德芙_0.活在风浪里的博客-CSDN博客本文实现了包含形象的卡通小人吃、睡、电脑工作的网页动画https://…

【Pytorch项目实战】之语义分割:U-Net、UNet++、U2Net

文章目录博主精品专栏导航一、前言1.1、什么是图像分割&#xff1f;1.2、语义分割与实例分割的区别1.3、语义分割的上下文信息1.4、语义分割的网络架构二、网络 数据集2.1、经典网络的发展史&#xff08;模型详解&#xff09;2.2、分割数据集下载三、算法详解3.1、U-Net3.1.1、…

oceanbase部署--使用OBD自动化部署三节点集群

准备步骤&#xff1a; 先将192.168.152.30 现有单节点集群stop&#xff0c;然后克隆两台虚拟机并在workstations重置网卡MAC&#xff0c;配置新主机IP [adminoceanbase ~]$ obd cluster list ---------------------------------------------------------------------- | …

【C语言学习笔记】:函数和对象

一、本篇要学习的内容和知识结构概览 二、知识点逐条分析 1. 混合型语言 C源文件的文件扩展名为.cpp, 也就是c plus plus的简写, 在该文件里有且只能有一个名为main的主函数, 它作为程序的入口. 因为这个主函数的存在, 所以C被称为混合型语言. 2. C语言当中的注释 第一种: …

[单片机框架][调试功能] 回溯案发现场

程序莫名死机跑飞&#xff0c;不知道问题&#xff0c;那么下面教你回溯错误源 回溯案发现场一、修改HardFault_Handler1. xx.s 在启动文件&#xff0c;找到HardFault_Handler。并修改。2. 定义HardFault_Handler_C函数。&#xff08;主要是打印信息并存储Flash&#xff09;3. 根…

javascript测试题

一、填空题 1. JavaScript 有两种引用数据类型 &#xff1a;___数组__、_____对象_ __。2. Javascript 通过___setTimeout______延迟指定时间后&#xff0c;去执行某程序。 3. Javascript 里 String 对象通过____indexOf____方法取第一次出现子字符 串的字符位置。4. Javascrip…

动态规划-背包问题

文章目录一、背包问题1. 背包问题简介2. 背包问题解决方法二、01 背包问题1. 实现思路2. 实现代码三、完全背包问题1. 实现思路2. 实现代码四、多重背包问题&#xff08;一&#xff09;1. 实现思路2. 实现代码五、多重背包问题&#xff08;二&#xff09;1. 实现思路2. 实现代码…

【C++之容器篇】精华:vector常见函数的接口的熟悉与使用

目录前言一、认识vector1. 介绍2. 成员类型二、默认成员函数&#xff08;Member functions&#xff09;1. 构造函数2. 拷贝构造函数vector (const vector& x);3. 析构函数4. 赋值运算符重载函数三、迭代器&#xff08;Iterators&#xff09;1. 普通对象的迭代器2. const对象…

4.5.3 ArrayList

文章目录1.特点2. 练习:ArrayList测试3.ArrayList扩容1.特点 存在java.util包中内部是用数组结构存放数据,封装数组的操作,每个对象都有下标内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长查询快,增删数据效率会低 2. 练习:ArrayList测试 package partThree;import…

ROS2机器人编程简述humble-第四章-COMPUTATION GRAPH .2

下图所示&#xff0c;机器人和障碍物直接距离&#xff1a;可以看到如果是单线雷达&#xff0c;这种测距和传感器安装的位置密切相关。chatgpt&#xff1a;ROS2机器人的COMPUTATION GRAPH概念是指&#xff0c;通过构建一个图形结构&#xff0c;将机器人的计算任务分解成一系列的…

蓝桥杯-最长公共子序列(线性dp)

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 已知有两个数组a,b。已知每个数组的长度。要求求出两个数组的最长公共子序列 序列 1 2 3 4 5 序列 2 3 2 1 4 5 子序列&#xff1a;从其中抽掉某个或多个元素而产生的新…

libVLC 视频裁剪

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 裁剪是指去除图像的外部部分,也就是从图像的左,右,顶部和/或底部移除一些东西。通常在视频中,裁剪是一种通过剪切不需要的部分来改变宽高比的特殊方式。 尤其是在做视频墙时,往往需要处理多个 vlc 实例…

【排序算法】归并排序(Merge Sort)

将两个的有序数列合并成一个有序数列&#xff0c;我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。归并排序介绍根据具体的实现&#xff0c;归并排序包括"从上往下"和"从下往上"2种方式。从下往上的归并排序将待排序的数…

Java常见的六种线程池、线程池-四种拒绝策略总结

点个关注&#xff0c;必回关 一、线程池的四种拒绝策略&#xff1a; CallerRunsPolicy - 当触发拒绝策略&#xff0c;只要线程池没有关闭的话&#xff0c;则使用调用线程直接运行任务。 一般并发比较小&#xff0c;性能要求不高&#xff0c;不允许失败。 但是&#xff0c;由于…