Spring Cloud Hystrix:服务容错保护

在这里插入图片描述

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


Spring Cloud Hystrix:服务容错保护

Spring Cloud Hystrix是Spring Cloud中的一个子项目,主要用于服务容错保护;分布式系统中,一个服务的故障或延迟可能会导致整个系统出现问题,为提高系统的稳定性和可用性,Hystrix提供了一种机制来防止这种故障扩散并提供适当的备选方案

Hystrix 简介

Hystrix是Netflix开源的一个用于处理分布式系统延迟和容错的库;主要用于在分布式系统中防止级联故障,提高系统的弹性和稳定性

创建hystrix-service模块

  • 依赖导入
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 配置application.yml
server:port: 8401
spring:application:name: hystrix-service
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://localhost:8001/eureka/
service-url:user-service: http://user-service
  • 启动类添加@EnableCircuitBreaker开启Hystrix的断路器功能
@EnableCircuitBreaker
@EnableDiscoveryClient
@SpringBootApplication
public class HystrixServiceApplication {public static void main(String[] args) {SpringApplication.run(HystrixServiceApplication.class, args);}
  • 创建UserHystrixController接口用于调用user-service服务

  • 服务降级演示

@GetMapping("/testFallback/{id}")
public CommonResult testFallback(@PathVariable Long id) {return userService.getUser(id);
}
  • UserService中添加调用方法与服务降级方法,方法上需要添加@HystrixCommand注解
@HystrixCommand(fallbackMethod = "getDefaultUser")
public CommonResult getUser(Long id) {return restTemplate.getForObject(userServiceUrl + "/user/{1}", CommonResult.class, id);
}public CommonResult getDefaultUser(@PathVariable Long id) {User defaultUser = new User(-1L, "defaultUser", "123456");return new CommonResult<>(defaultUser);
}

@HystrixCommand

@HystrixCommand是Hystrix中的一个注解,用于将Hystrix的断路器功能与具体的方法进行集成;当在方法上添加@HystrixCommand注解时,该方法的执行将由Hystrix进行包装和管理,以提供容错保护和服务降级的能力

  • fallbackMethod:指定服务降级处理方法
  • ignoreExceptions:忽略某些异常,不发生服务降级
  • commandKey:命令名称,用于区分不同的命令
  • groupKey:分组名称,Hystrix会根据不同的分组来统计命令的告警及仪表盘信息
  • threadPoolKey:线程池名称,用于划分线程池

Hystrix 单个实例监控

Hystrix中,可以通过Hystrix Dashboard来监控单个实例的运行情况;Hystrix Dashboard提供可视化的界面,可以实时监控和查看Hystrix命令的执行情况、断路器的状态、请求的成功和失败等信息

创建hystrix-dashboard模块
  • 依赖导入
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 配置application.yml
server:port: 8501
spring:application:name: hystrix-dashboard
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://localhost:8001/eureka/
  • 启动类上添加@EnableHystrixDashboard来启用监控功能
@EnableHystrixDashboard
@EnableDiscoveryClient
@SpringBootApplication
public class HystrixDashboardApplication {public static void main(String[] args) {SpringApplication.run(HystrixDashboardApplication.class, args);}
}

Hystrix 集群实例监控

Hystrix集群实例监控,使用Netflix Turbine来聚合多个实例的Hystrix数据,并提供集群级别的监控;Netflix Turbine是一个用于监控Hystrix Stream数据的工具,它允许您在分布式系统中查看多个服务实例的断路器状态和指标

创建turbine-service模块
  • 依赖导入
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 配置application.yml,添加Turbine相关配置
server:port: 8601
spring:application:name: turbine-service
eureka:client:register-with-eureka: truefetch-registry: trueservice-url:defaultZone: http://localhost:8001/eureka/
turbine:app-config: hystrix-service #指定需要收集信息的服务名称cluster-name-expression: new String('default') #指定服务所属集群combine-host-port: true #以主机名和端口号来区分服务
  • 启动类上添加@EnableTurbine来启用Turbine相关功能
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class TurbineServiceApplication {public static void main(String[] args) {SpringApplication.run(TurbineServiceApplication.class, args);}
}

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python hashlib 模块详细教程:安全哈希与数据完整性保护

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python hashlib 模块详细教程&#xff0c;文章6500字&#xff0c;阅读大约17分钟&#xff0c;大家enjoy~~ hashlib模块为Python提供了一种简便的方式来使用各种哈希算法&…

国产高云FPGA:OV5640图像视频采集系统,提供Gowin工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐国产高云FPGA相关方案推荐国产高云FPGA基础教程 3、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条Video Frame Buffer 图像缓存DDR3 Memory Interface 4、Gowin工程详解5、上板调试验证并演示准备工作静态演示 6、福利&#xff1…

算法-链表-简单-相交、反转、回文、环形、合并

记录一下算法题的学习5 在写关于链表的题目之前&#xff0c;我们应该熟悉回忆一下链表的具体内容 什么是链表&#xff1a; 链表&#xff08;Linked list&#xff09;是一种常见的基础数据结构&#xff0c;是一种线性表&#xff0c;但是并不会按线性的顺序存储数据&#xff0c…

在前端开发中,什么是CDN(Content Delivery Network)?它的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

力扣第695题 岛屿的最大面积 C++ DFS BFS 附Java代码

题目 695. 岛屿的最大面积 中等 相关标签 深度优先搜索 广度优先搜索 并查集 数组 矩阵 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合&#xff0c;这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你…

2023年中国骨质疏松治疗仪发展趋势分析:小型且智能将成为产品优化方向[图]

骨质疏松治疗仪利用磁场镇静止痛、消肿消炎的治疗作用迅速缓解患者腰背疼痛等骨质疏松临床症状。同时利用磁场的磁-电效应产生的感生电势和感生电流&#xff0c;改善骨的代谢和骨重建&#xff0c;通过抑制破骨细胞、促进成骨细胞的活性来阻止骨量丢失、提高骨密度。 骨质疏松治…

vue-组件生命周期+网络请求

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-组件生命周期网络请求 目录 组件生命周期 1. Vue的生命周期 2. Vue 子组件和父组件执行顺序…

电脑集中管理软件有哪些?电脑集中管控怎么做

电脑集中管理软件有哪些&#xff1f;电脑集中管控怎么做 电脑集中管理软件是指通过一种软件或系统&#xff0c;对多台电脑进行集中管理和控制的工具。这种软件通常具备远程控制、软硬件监控、自动部署等功能。可以方便企业或组织统一管理电脑资源&#xff0c;提高工作效率。今…

vue的常用指令

1.使用双花括号( {{}} )对变量输出,内部可以写简单的表达式用于对数据的处理 2..v-text&#xff1a;相当于js的innerText, 3.v-html&#xff1a;相当于js的innerHTML 4.v-bind&#xff1a;动态绑定属性,简写是冒号( : ) 5.绑定class&#xff1a;操作元素的 class 列表和内联样式…

【开源】基于Vue和SpringBoot的固始鹅块销售系统

项目编号&#xff1a; S 060 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S060&#xff0c;文末获取源码。} 项目编号&#xff1a;S060&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固…

C语言每日一题(31)相交链表

力扣160.相交链表 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意…

【unity2021.3.6f】运行官方 Vuforia Hololens 2 Sample 教程

文章目录 前言一、创建unity项目二、导入unity1.添加到我的资源2.在package Manage 里面去找到&#xff0c;点击下载&#xff0c;下载完成后点击Import 如下图&#xff1a;3.导入途中会有窗口弹出 很多提示&#xff0c;都点击默认选项&#xff1a;Import 、Install/Upgrade 等 …