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

springcloud3 hystrix实现服务降级的案例配置2

一 服务降级的说明

1.1 服务降级说明

"服务器忙,请稍后在试"不让客户达等待,立即返回一个友好的提示。

1.2 服务降级的触发情况

1.程序运行异常;

2.超时;

3.服务熔断触发服务降级;4

.线程池/信号量打满也会导致服务降级

1.3 通用注解

 

二 案例:对每一个方法实行降级处理

2.1 消费端

2.1.1 pom文件

   <!--hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

2.1.2 设置降级规则

代码

 @GetMapping(value = "/consumer/payment/nacos/{id}")@HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")})public String paymentInfo(@PathVariable("id") Long id){System.out.println("获取服务器配置信息serverUrl:"+serverURL);System.out.println("9008的controller获取id:"+id);String str=orderConsumerService.getPaymentByIdLjf22222(id);return "ok:"+serverURL+""+str;}@GetMapping(value = "/consumer/getinfo/{id}")public Object getUserInfo(@PathVariable("id") Long id){User u=new User(id.intValue(),"beijing"+id);return  orderConsumerService.postQueryParams(u);}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消费者9008,服务出错了,进行服务降级"+id;}

 2.1.3 开启hystrix熔断

添加:@EnableHystrix 注解

 2.2 服务端

2.2.1 pom文件

   <!--hystrix--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

2.2.2 设置降级规则

1.代码

    @GetMapping(value = "/ljf/getinfo/{id}")@HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")})public String getPayment(@PathVariable("id") Integer id){try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}int k=10/0;System.out.println("================服务9009 获取到的参数id:"+id);return "服务9009 获取到的参数id:"+id;}@PostMapping("/path")public  String postQueryParams(@RequestBody User user) throws JsonProcessingException {String str=  new JsonMapper().writeValueAsString(user);System.out.println("post提交....");return str;}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消费者9009,服务出错了,进行服务降级"+id;}

2.截图

 2.2.3 开启hystrix熔断

  2.3 启动服务测试

1.启动nacos,启动sleuth

2.启动consumer9008   provider9009

 3.测试

三 案例:设置全局降级处理办法

3.1 消费端设置

1.代码

package com.ljf.mscloud.controller;import com.ljf.mscloud.model.User;
import com.ljf.mscloud.service.OrderConsumerService;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;/*** @ClassName: OrderConsumerController* @Description: TODO* @Author: admin* @Date: 2023/08/14 18:09:14 * @Version: V1.0**/
@RestController
@Slf4j
@RefreshScope //支持Nacos的动态刷新功能。
//@DefaultProperties(defaultFallback = "globalFallBackInfo")
public class OrderConsumerController {@Value("${service-url.nacos-user-service}")private String serverURL;@Autowiredprivate OrderConsumerService orderConsumerService;@GetMapping(value = "/consumer/payment/nacos/{id}")@HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")})public String paymentInfo(@PathVariable("id") Long id){System.out.println("获取服务器配置信息serverUrl:"+serverURL);System.out.println("9008的controller获取id:"+id);String str=orderConsumerService.getPaymentByIdLjf22222(id);return "ok:"+serverURL+""+str;}@GetMapping(value = "/consumer/getinfo/{id}")public Object getUserInfo(@PathVariable("id") Long id){User u=new User(id.intValue(),"beijing"+id);return  orderConsumerService.postQueryParams(u);}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消费者9008,服务出错了,进行服务降级"+id;}public String globalFallBackInfo(){return "Global异常处理信息,请稍后再试,客户端9008";}
}

2.截图

 原因在没有在制定方法加:@HystrixCommand  那么加上此注解后:

 再次访问:http://localhost:9008/consumer/getinfo/666

 

四 案例:给Feginclient注解的接口上添加降级规则

4.1 controller

package com.ljf.mscloud.controller;import com.ljf.mscloud.model.User;
import com.ljf.mscloud.service.OrderConsumerService;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;/*** @ClassName: OrderConsumerController* @Description: TODO* @Author: admin* @Date: 2023/08/14 18:09:14 * @Version: V1.0**/
@RestController
@Slf4j
@RefreshScope //支持Nacos的动态刷新功能。
//
//@DefaultProperties(defaultFallback = "globalFallBackInfo")
public class OrderConsumerController {@Value("${service-url.nacos-user-service}")private String serverURL;@Autowiredprivate OrderConsumerService orderConsumerService;@GetMapping(value = "/consumer/payment/nacos/{id}")//   @HystrixCommand(fallbackMethod = "dealFallBackInfo",commandProperties = {//        @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="1500")// })public String paymentInfo(@PathVariable("id") Long id){System.out.println("获取服务器配置信息serverUrl:"+serverURL);System.out.println("9008的controller获取id:"+id);String str=orderConsumerService.getPaymentByIdLjf22222(id);return "ok:"+serverURL+""+str;}@GetMapping(value = "/consumer/getinfo/{id}")// @HystrixCommandpublic Object getUserInfo(@PathVariable("id") Long id){User u=new User(id.intValue(),"beijing"+id);//  int age = 10/0;return  orderConsumerService.postQueryParams(u);}public String dealFallBackInfo(@PathVariable("id") Long id){return "我是消费者9008,服务出错了,进行服务降级"+id;}public String globalFallBackInfo(){return "Global异常处理信息,请稍后再试,客户端9008";}
}

4.2 service

package com.ljf.mscloud.service;import com.ljf.mscloud.model.User;
import feign.Headers;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;@Component
@FeignClient(value = "mscloud-fegin-nacos-hystrix-provider9009",fallback = PaymentFallbackService.class)
public interface OrderConsumerService {@GetMapping(value = "/ljf/getinfo/{yyid}") //相当于:public String getPaymentByIdLjf22222(@PathVariable("yyid") Long ssid);// @Headers({"Content-Type: application/json"})// @PostMapping("/path")@PostMapping(value = "/path",consumes ="application/json")String postQueryParams(@RequestBody User user);
}

4.3 fallback实现类

@Component
public class PaymentFallbackService  implements OrderConsumerService{@Overridepublic String getPaymentByIdLjf22222(Long ssid) {return "getPaymentByIdLjf22222方法出现问题开始降级";}@Overridepublic String postQueryParams(User user) {return "postQueryParams方法出现问题开始降级";}
}

 4.4 配置文件

 4.5 测试

1.故意只启动 consuemr9008,不启动provider9009 模拟宕机的情况

2.测试

 

 

相关文章:

springcloud3 hystrix实现服务降级的案例配置2

一 服务降级的说明 1.1 服务降级说明 "服务器忙&#xff0c;请稍后在试"不让客户达等待&#xff0c;立即返回一个友好的提示。 1.2 服务降级的触发情况 1.程序运行异常&#xff1b; 2.超时&#xff1b; 3.服务熔断触发服务降级&#xff1b;4 .线程池/信号量打…...

第 3 章 稀疏数组和队列(1)

3.1 稀疏 sparsearray 数组 3.1.1先看一个实际的需求 编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0.因此记录了很多没有意义的数据.->稀疏数组 3.1.2基本介绍 当一个数组中大部分元素为 0&#xff0c;或者为同…...

7-10 奇偶分家

分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输…...

使用词向量以数学方式查找具有相似含义的单词

摄影&#xff1a;Nika Charakova 一、说明 简而言之&#xff0c;词向量只不过是表示自然语言词含义的一系列实数。这项技术是有用的NLP功能的重要推动力&#xff0c;使机器能够“理解”人类语言。本文讨论如何使用词向量以编程方式计算文本的语义相似性&#xff0c;例如&#x…...

opencv实现以图搜图

这里写目录标题 1. 步骤1.1 导入OpenCV库&#xff1a;1.2 加载图像1.3 提取特征1.4 匹配特征1.5 显示结果 2. 完整代码3. 测试图片及效果 1. 步骤 1.1 导入OpenCV库&#xff1a; 在您的C代码中&#xff0c;首先需要导入OpenCV库。您可以使用以下语句导入核心模块&#xff1a;…...

爬虫工作中代理失效了怎么处理?

Hey&#xff01;亲爱的爬虫小伙伴们&#xff0c;是不是经常在爬虫的工作中遇到代理IP失效的问题&#xff1f;别着急&#xff0c;今天我来分享一些应对代理失效的妙招&#xff01;这些方法简单易行&#xff0c;让你爬虫顺利进行. 一、为什么代理会失效&#xff1f; 在爬虫过程…...

使用虚拟环境conda安装不同版本的cuda,cudnn,pytorch

背景&#xff1a;在学习深度学习时&#xff0c;我们不可避免的需要跑多个神经网络&#xff0c;而不同的神经网络环境都不一样&#xff0c;所以必须要使用到虚拟环境(如conda)去做环境隔离&#xff0c;安装属于自己的环境。在这环境中&#xff0c;大多神经网络都必须要用到cuda&…...

【24择校指南】华东师范大学计算机考研考情分析

华东师范大学(B) 考研难度&#xff08;☆☆☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分数人数统计&#xff09;、院校概况、23考试科目、23复试详情、各科目及专业考情分析。 正文2563字&#xff0c;预计阅读&#xff1a;3分钟。 2023考情概况…...

什么是LAXCUS分布式操作系统?

相较Linux、Windows&#xff0c;Laxcus是同时在多台计算机上运行的操作系统&#xff0c;处理大规模、高并发、高性能业务&#xff0c;其特点是资源共享和任务并行&#xff0c;并实现【数存算管】超融合一体化。环境中的资源&#xff1a;CPU、GPU、内存、硬盘、网络&#xff0c;…...

Redis数据结构——链表list

链表是一种常用的数据结构&#xff0c;提供了顺序访问的方式&#xff0c;而且高效地增删操作。 Redis中广泛使用了链表&#xff0c;例如&#xff1a;列表的底层实现之一就是链表。 在Redis中&#xff0c;链表分为两部分&#xff1a;链表信息 链表节点。 链表节点用来表示链表…...

[自学记录06|*百人计划]Gamma矫正与线性工作流

一、前言 Gamma矫正其实也属于我前面落下的一块内容&#xff0c;打算把它补上&#xff0c;其它的没补是因为我之前写的GAMES101笔记里已经涵盖了&#xff0c;而Gamma矫正在101里面确实没提到&#xff0c;于是打算把它补上&#xff0c;这块内容并不难&#xff0c;但是想通透的理…...

【数据结构】二叉树链式结构的实现及其常见操作

目录 1.手搓二叉树 2.二叉树的遍历 2.1前序、中序以及后序遍历 2.2二叉树的层序遍历 3.二叉树的常见操作 3.1求二叉树节点数量 3.2求二叉树叶子节点数量 3.3求二叉树第k层节点个数 3.3求二叉树的深度 3.4二叉树查找值为x的节点 4.二叉树的销毁 1.手搓二叉树 在学习…...

从零实战SLAM-第九课(后端优化)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…...

Python Opencv实践 - 图像金字塔

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像上采样 #cv.pyrUp(src, dstNone, dstsizeNone, borderTypeNone) #参考资料&#xff1a;https://blo…...

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的固定帧率(C++)

Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的固定帧率&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在BGAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过BGAPI SDK设置相机固定帧…...

计算机竞赛 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…...

DNNGP模型解读-early stopping 和 batch normalization的使用

一、考虑的因素&#xff08;仅代表个人观点&#xff09; 1.首先我们看到他的这篇文章所考虑的不同方面从而做出的不同改进&#xff0c;首先考虑到了对于基因组预测的深度学习方法的设计 &#xff0c;我们设计出来这个方法就是为了基因组预测而使用&#xff0c;这也是主要目的&…...

【目标检测】目标检测 相关学习笔记

目标检测算法 PASCALVOC2012数据集 挑战赛主要分为 图像分类 目标检测 目标分割 动作识别 数据集分为四个大类 交通&#xff08;飞机 船 公交车 摩托车&#xff09; 住房&#xff08;杯子 椅子 餐桌 沙发&#xff09; 动物&#xff08;鸟 猫 奶牛 狗 马 羊&#xff09; 其他&a…...

面试攻略,Java 基础面试 100 问(十六)

反射使用步骤(获取Class对象、调用对象方法) 获取想要操作的类的Class对象&#xff0c;他是反射的核心&#xff0c;通过Class对象我们可以任意调用类的方法。 调用 Class 类中的方法&#xff0c;既就是反射的使用阶段。 使用反射 API 来操作这些信息。 什么是 java 序列化&…...

章节5:脚本注入网页-XSS

章节5&#xff1a;脚本注入网页-XSS XSS &#xff1a;Cross Site Script 恶意攻击者利用web页面的漏洞&#xff0c;插入一些恶意代码&#xff0c;当用户访问页面的时候&#xff0c;代码就会执行&#xff0c;这个时候就达到了攻击的目的。 JavaScript、Java、VBScript、Activ…...

ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031) 二、CVE-2017-15031 一、ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031) Title 未初始化或保存/恢复PMCR_EL0可能会泄露安全世界的时间信息 CVE ID CVE-2017-1503…...

迅捷视频工具箱:多功能音视频处理软件

这是一款以视频剪辑、视频转换、屏幕录像等特色功能为主&#xff0c;同时附带有视频压缩、视频分割、视频合并等常用视频处理功能为主的视频编辑软件。该软件操作简单易用&#xff0c;即使没有视频处理经验的用户也可以轻松上手。将视频添加到工具箱对应功能后&#xff0c;简单…...

linux--fork()详解

fork() 参考链接&#xff1a;链接 进程控制原语包括&#xff1a;进程的建立、进程的撤销、进程的等待和进程的唤醒。 fork&#xff0c;在英语用译为叉子&#xff0c;形状像Y&#xff0c;反过来就如下图&#xff1a; 就是本来只有一个进行app,然后它调用了fork()函数&#xf…...

go_并发编程(1)

go并发编程 一、 并发介绍1&#xff0c;进程和线程2&#xff0c;并发和并行3&#xff0c;协程和线程4&#xff0c;goroutine 二、 Goroutine1&#xff0c;使用goroutine1&#xff09;启动单个goroutine2&#xff09;启动多个goroutine 2&#xff0c;goroutine与线程3&#xff0…...

第一百一十五回 权限管理包permission_handler

文章目录 概念介绍使用方法示例代码经验分享 我们在上一章回中介绍了局部动态列表相关的内容&#xff0c;本章回中将介绍权限管理包 permission_hanadler.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 权限是使用某种功能的授权&#xff0c;比如使用手机上的相机…...

【机器学习】sklearn数据集的使用,数据集的获取和划分

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 sklearn数据集 二、安装sklearn二、获取数据集三、…...

Mysql之 optimizer_trace 相关总结

Mysql之 optimizer_trace 相关总结 MySQL官网介绍&#xff1a;https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_OPT_TRACE.html 1. 简介 MySQL优化器可以生成Explain执行计划&#xff0c;通过执行计划查看sql是否使用了索引&#xff0c;使用了哪种索&#xff1b; 但…...

【Linux命令详解 | wget命令】 wget命令用于从网络下载文件,支持HTTP、HTTPS和FTP协议

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 基本文件下载2. 递归下载整个网站3. 限制下载速率4. 防止SSL证书校验5. 断点续传6. 指定保存目录7. 自定义保存文件名8. 增量下载9. 使用HTTP代理10. 后台下载 总结 简介 在编程世界中&#xff0c;处理网络资源是…...

DockePod信号处理机制与僵尸进程优化

Docke&Pod信号处理与僵尸进程优化 容器与信号的关系 SIGTERM信号&#xff1a;程序结束(terminate)信号&#xff0c;这是用来终止进程的标准信号&#xff0c;也是 kill 、 killall 、 pkill 命令所发送的默认信号。与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程…...

NetApp StorageGRID 对象存储,使您能够跨公有、私有云和混合多云环境管理非结构化数据

NetApp StorageGRID 对象存储&#xff0c;使您能够跨公有、私有云和混合多云环境管理非结构化数据 主要优势 智能&#xff1a;了解行业领先的数据生命周期管理软件。 • 借助 NetApp StorageGRID 基于对象的存储解决方案的数据管理功能、您可以从大型非结构化数据中获得高价值…...