SpringBoot整合Hystrix服务降级案例(一)

news/2024/11/28 2:36:38/

一、服务端配置服务降级

1)、相关依赖

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

2)、启动类开启@EnableCircuitBreaker

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class PaymentHystrixMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentHystrixMain8001.class,args);}
}

3)、业务类开启服务降级@HystrixCommand

@Service
public class PaymentService {public String paymentInfoOk(Integer id) {return "线程池:"+Thread.currentThread().getName()+" paymentInfoOk,id:"+id;}@HystrixCommand(fallbackMethod = "paymentInfoTimeOutHandler",commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "5000")})public String paymentInfoTimeOut(Integer id) throws InterruptedException {// int age=1/0;TimeUnit.SECONDS.sleep(3);return "线程池:"+Thread.currentThread().getName()+" paymentInfoTimeOut,id:"+id+",耗时3秒钟";}public String paymentInfoTimeOutHandler(Integer id){return "线程池:"+Thread.currentThread().getName()+" paymentInfoTimeOut繁忙请稍后重试,id:"+id+",服务降级";}}

二、客户端配置服务降级

1)、相关依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2)、全局配置

server:port: 80
spring:application:name: cloud-order-serviceeureka:client:#表示是否将自己注册进Eureka Server 默认为trueregister-with-eureka: true#是否从Eureka Server抓取已有的注册信息,默认为true。单节点无所谓。集群必须设置为true才能配合ribbon使用负载均衡fetch-registry: trueservice-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/#设置Feign客户端连接超时时间(openFeign默认支持ribbon)
ribbon:#指的是建立连接所用时间,使用于网络状态正常情况下,两端连接所用时间ReadTimeout: 5000#指的是建立连接后从服务器读取到可用资源所用的时间ConnectTimeout: 5000
feign:hystrix:enabled: true

3)、业务类开启服务降级@HystrixCommand

@DefaultProperties指定全局的,@HystrixCommand指定特定的

@RestController
@Slf4j
@DefaultProperties(defaultFallback = "paymentInfoGlobalTimeOutHandler")
public class PaymentHystrixController {@Resourceprivate PaymentHystrxFeign paymentHystrxFeign;@GetMapping("/payment/hystrix/ok/{id}")public String paymentInfoOk(@PathVariable("id") Integer id){return paymentHystrxFeign.paymentInfoOk(id);}/* @HystrixCommand(fallbackMethod = "paymentInfoTimeOutHandler",commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")})*/@HystrixCommand(commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")})@GetMapping("/payment/hystrix/timeout/{id}")public String paymentInfoTimeOut(@PathVariable("id") Integer id){int agg=1/0;return paymentHystrxFeign.paymentInfoTimeOut(id);}public String paymentInfoTimeOutHandler(@PathVariable("id")Integer id){return "线程池:"+Thread.currentThread().getName()+" 特定服务降级,繁忙请稍后重试,id:"+id+",服务降级";}public String paymentInfoGlobalTimeOutHandler(){return "线程池:"+Thread.currentThread().getName()+" 全局服务降级,繁忙请稍后重试,id:服务降级";}
}

3)、测试服务降级

 


http://www.ppmy.cn/news/40254.html

相关文章

react4:网络请求

1. axios 请求安装&#xff1a;npm i axios axios 二次封装&#xff1a;配置,拦截器等应用 在&#xff1a;utils文件夹下request.js中配置 //utils文件夹下request.js中配置//导入 axios import axios from "axios";//实例化axios var service axios.create({time…

USB土壤参数检测仪丨便捷、全面、耐用

土壤水分是农业科学灌溉的基础&#xff0c;无论是植物科学研究、还是农业增产增收&#xff0c;土壤中的水分、温度、电导率、酸碱度都十分重要。 但现在的问题是“如何迅速、便捷地获取土壤参数信息”&#xff1f; USB土壤参数检测仪 就能实现以上目的 ↓ ↓ ↓ USB土壤参数…

【云原生】k8s Service 实现服务发现和负载均衡

文章目录前言Service 介绍Service 的四种类型及使用方式Service 的定义和使用通过命令创建服务查看创建的服务情况不指定 Selectors 的服务Headless 服务Service 工作原理及原理图Ingress 讲解集群外部如何访问服务总结前言 在容器编排系统中&#xff0c;如 Kubernetes&#x…

java微服务架构---基础环境搭建

1.Java概述 人与人之间的沟通需要使用互相能听得懂的语言。同理&#xff0c;与计算机沟通也需要使用计算机能懂的语言。我们接下来要学习的Java语言便是众多语言中的一种。 Java语言是美国Sun公司&#xff08;已被Oracle收购&#xff09;的詹姆斯高斯林&#xff08;Java之父&…

MIUI14+安卓13 Root教程 小米10 小米11 小米12 小米13 红米

MIUI14安卓13 Root教程 测试使用小米10 miui14稳定版 &#xff08;其他手机流程一样&#xff09; 1. 确保手机已完成 BL 解锁。这里来申请解锁 2. 手机下载并且安装Magisk 下载地址 3. 去下载当前版本刷机包 小米 10 (umi) 国行版 线刷、卡刷包 ​ 网页上ctrlf 搜索 miui1…

ORACLE EBS 系统架构与应用实践(一)

一、从ERP到EBS 从上世纪70年代晚期的物料需求计划MRP&#xff08;Material Requirements Planning&#xff09;到80年代的MRP II&#xff0c;再到90年代的企业资源计划ERP&#xff08;Enterprise Resource Planning&#xff09;&#xff0c;企业管理软件&#xff08;或曰应用…

restTemplate发送multipartFile和String混合参数及接收

最近有个任务是将文件上传到服务器后再发送到另一台服务器接收&#xff0c;作为一个代码表述为主的程序员&#xff0c;文字表达能力有限&#xff0c;就上代码吧~~ 前端代码片段 <table><tbody><tr><td>需要上传服务器的文件</td><td><…

JavaSE基础(17) static 关键字

static 关键字 静态&#xff08;static&#xff09;可以修饰属性和方法。 称为静态属性&#xff08;类属性&#xff09;、静态方法&#xff08;类方法&#xff09;。 静态成员是全类所有对象共享的成员。 在全类中只有一份&#xff0c;不因创建多个对象而产生多份。 不必创…