熔断器Hystrix简介

news2024/11/23 16:46:07
  • 使用熔断器防止服务雪崩-Hystrix

    • 雪崩效应

      在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 RPC 相互调用,在 Spring
      Cloud 中可以用 RestTemplate + Ribbon 和 Feign 来调用。为了保证其高可用,单个服务通常会集群部署。由
      于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线
      程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的
      依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。

    • Hystrix概述

      • Netflix 开源了 Hystrix 组件,实现了熔断器模式,Spring Cloud 对这一组件进行了整合。在微服务架构中,一个请求需要调用多个服务是非常常见的,如下图:
        在这里插入图片描述

      • 较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值(Hystrix 是 5 秒
        20 次) 熔断器将会被打开。
        在这里插入图片描述

      • 熔断器打开后,为了避免连锁故障,通过 fallback 方法可以直接返回一个固定值。

    • Ribbon 中使用熔断器

      • 添加Hystrix依赖

        <dependency>
        	<groupId>org.springframework.cloud</groupId>
        	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        
      • 在启动类添加EnableHystrix注解设置允许使用熔断器

        /**
        * 在启动类添加@EnableDiscoveryClient声明此应用为服务发现客户端(服务消费者)
        * 在启动类添加EnableHystrix注解设置允许使用熔断器
        */
        @EnableDiscoveryClient
        @SpringBootApplication
        @EnableHystrix
        public class SpringCloudCustomer1Application {
        	public static void main(String[] args) {
        		SpringApplication.run(SpringCloudCustomer1Application.class, args);
        	}
        }
        
      • 在Service中访问服务的方法中增加@HystrixCommand注解,指定服务访问达到熔断器阈值时调用的方法

        @Service
        public class RibbonService {
            //注入消费者访问对象
            @Autowired
            private RestTemplate restTemplate;
            @HystrixCommand(fallbackMethod = "requestFail")
            public String getMsg(){
                String str = restTemplate.getForObject("http://springcloudprovider1/
                provider1/get",String.class);
                return str;
            }
            public String requestFail(){
            	return "request fail ...";
            }
        }
        
    • Feign中使用熔断器

      • 开启熔断器, Feign 是自带熔断器的,但默认是关闭的。需要在配置文件中配置打开它,在配置文件增加以下代码:

        feign:
          hystrix:
            enabled: true
        
      • 在FeignService的@FeignClient注解添加fallback属性

        /**
        * fallback属性,指定熔断器open状态调用的类
        */
        @FeignClient(value="springcloud-provider1",fallback = FeignServiceFallback.class)
        public interface FeignService {
            @RequestMapping(value="provider1/get",method = RequestMethod.GET)
            public String getMsg();
        }
        
      • 创建fallback指定的回退类

        /**
        * fallback(回退)类实现FeignService接口
        */
        @Component
        public class FeignServiceFallback implements FeignService {
            @Override
            public String getMsg() {
            	return "request fail ...";
            }
        }
        
    • 使用熔断器仪表盘监控-Hystrix Dashboard

      • 熔断器仪表盘,用于监控熔断器作用过程

      • 在Ribbon和Feign项目增加Hystrix仪表盘功能,两个项目增加Hystrix的方式是相同的相同

      • 添加Hystrix仪表盘监控

        • 在pom.xml中增加依赖

          <dependency>
          	<groupId>org.springframework.cloud</groupId>
          	<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
          </dependency>
          
        • 在启动类中增加 @EnableHystrixDashboard 注解

          @EnableDiscoveryClient
          @SpringBootApplication
          @EnableHystrix
          @EnableHystrixDashboard
          public class SpringCloudCustomer1Application {
              public static void main(String[] args) {
              	SpringApplication.run(SpringCloudCustomer1Application.class, args);
              }
          }
          
        • 创建hystrix.stream的Servlet配置(Java配置类配置,类似shiro的配置)

          @Configuration
          public class HystrixDashboardConfig {
          	@Bean
          	public ServletRegistrationBean getServlet() {
                  //创建HystrixMetricsStreamServlet
                  HystrixMetricsStreamServlet streamServlet = new
                  HystrixMetricsStreamServlet();
                  //配置HystrixMetricsStreamServlet
                  ServletRegistrationBean registrationBean = new
                  ServletRegistrationBean(streamServlet);
                  registrationBean.setLoadOnStartup(1);
                  registrationBean.addUrlMappings("/hystrix.stream");
                  registrationBean.setName("HystrixMetricsStreamServlet");
                  return registrationBean;
              }
          }
          
        • 测试Hystrix Dashboard

          • 浏览器端访问 http://localhost:port/hystrix

            在这里插入图片描述

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

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

相关文章

Sentinel学习——CAP理论,微服务中的雪崩问题,和Hystix的解决方案 Sentinel的相关概念 + 下载运行

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍CAP理论&#xff0c;微…

红黑树是如何实现的?

文章目录 一、红黑树的概念二、红黑树的性质三、红黑树和AVL树对比四、红黑树的插入1. 红黑树的结点定义2. 父亲的颜色3. 叔叔的颜色为红色4. 叔叔不存在5. 叔叔存在且为黑6. 插入的抽象图 五、红黑树的验证1. 检查平衡2. 计算高度与旋转次数3. 验证 六、 红黑树与AVL树的比较 …

QT使用前的知识

QT使用前的知识 常用的快捷键 源文件的内容解释 .pro文件的解释 头文件的解释 构建新的对象—组成对象树 槽函数 自定的信号和槽 槽函数的信号是一个重载函数时 电机按钮触发信号 调用无参数的信号 断开信号

GPT-4科研实践:数据可视化、统计分析、编程、机器学习数据挖掘、数据预处理、代码优化、科研方法论

查看原文>>>GPT4科研实践技术与AI绘图 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#x…

详解C语言—文件操作

目录 1. 为什么使用文件 2. 什么是文件 3. 文件的使用 文件指针 文件的打开和关闭 三个标准的输入/输出流&#xff1a; 4. 文件的顺序读写 对字符操作&#xff1a; fputc&#xff1a; fgetc&#xff1a; 练习复制整个文件&#xff1a; 对字符串操作&#xff1a;…

C++ 并发编程实战 第七章 设计无锁数据结构

目录 7.1 定义和推论 7.1.1 非阻塞型数据结构 7.1.2 无锁数据结构 7.1.3 无需等待的数据结构 7.1.4 无锁数据结构的优点和缺点 7.2 无锁数据结构范例 7.2.1 实现线程安全的无锁栈 7.2.2 制止麻烦的内存泄漏&#xff1a;在无锁数据结构中管理内存 7.2.3 运用风险指针检…

排序:败者树和置换选择排序(解决外部排序中的优化问题)

1.算法目的&#xff08;败者树&#xff09; 解决多路平衡归并带来的问题。 在外部排序中&#xff0c;使用k路平衡归并策略, 选出一个最小元素需要对比关键字(k-1)次&#xff0c; 导致内部归并所需时间增加。&#xff08;可用“败者树”进行优化&#xff09; 2.败者树的定义 …

Spring源码分析(四) Aop全流程

一、Spring AOP基础概念 1、基础概念 连接点(Join point)&#xff1a;能够被拦截的地方&#xff0c;Spring AOP 是基于动态代理的&#xff0c;所以是方法拦截的&#xff0c;每个成员方法都可以称之为连接点&#xff1b;切点(Poincut)&#xff1a;每个方法都可以称之为连接点&…

从1开始的Matlab(快速入门)

MATLAB软件版本&#xff1a;MATLAB R2016b 本文是博主从零开始学Matlab的记录&#xff0c;适合第一次接触Matlab的同学阅读。 一、基础介绍 1.1界面认识 1.2变量命名 注&#xff1a;Matlab中的注释 %% 独占一行的注释&#xff08;有上下横线分割&#xff09; % 普通注释 …

Node.js 是如何处理请求的

前言&#xff1a;在服务器软件中&#xff0c;如何处理请求是非常核心的问题。不管是底层架构的设计、IO 模型的选择&#xff0c;还是上层的处理都会影响一个服务器的性能&#xff0c;本文介绍 Node.js 在这方面的内容。 TCP 协议的核心概念 要了解服务器的工作原理首先需要了…

【小白专属01】SpringBoot框架搭建

目录 前言 一、搭建环境 二、开始SpringBoot框架搭建 1. 打开IDEA 2. 新建项目 3. 选择版本和依赖 4. 目录结构 5. 启动项目 前言 上节回顾 上一节我们对智慧仓库管理系统的项目背景和项目效果进行的梳理&#xff0c;主要就是功能模块和实现步骤进行展示。想要从零开…

关于Adobe Acrobat Reader升级后界面布局变化-新旧布局的选择切换

Adobe Acrobat Reader 不知何时自动升级了&#xff0c;升级后界面布局发生了较大的变化&#xff1a;工具栏放到了左侧、书签栏放到了右侧。 如果对新界面布局不习惯&#xff0c;可在新界面下通过路径**【菜单】->【禁用新的 Acrobat Reader】、并重启 Acrobat Reader 后切…

【微信小程序】WXML模板语法

模板与绑定 1.数据绑定 1&#xff09;在data中定义数据 在页面对应的.js文件中把数据定义到data对象中即可 2&#xff09;在WXML中使用数据 把data中的数据绑定到页面中渲染&#xff0c;使用Mustache&#xff08;双大括号{{}}&#xff09;将变量名包起来即可&#xff0c;格式…

Codeforces Round 892 (Div. 2) - E. Maximum Monogonosity 思维dp 详细解析

题目链接 好久没有写题了复健一下qwq 题目大意 解题思路 这题目还挺妙的 首先考虑比较正常的dp&#xff0c; d p [ i ] [ j ] dp[i][j] dp[i][j] 为前 i i i的长度选 j j j个长度的最大价值&#xff0c;那么转移方程是&#xff1a; 图片来自&#xff1a;图片来源 但是这个是 …

(自学)黑客————网络安全技术

如果你想自学网络安全&#xff0c;首先你必须了解什么是网络安全&#xff01;&#xff0c;什么是黑客&#xff01;&#xff01; 1.无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面性&#xff0c;例如 Web 安全技术&#xff0c;既有 Web 渗透2.也有 Web 防…

2023 年 Bitget Wallet 测评

对Bitget Wallet钱包的看法 Bitget Wallet在安全性、产品实力和使用体验方面可与Metamask媲美&#xff0c;甚至有所超越&#xff0c;唯一稍显不足的是知名度稍逊一筹。在众多钱包中&#xff0c;Bitget Wallet是拥有最全面的钱包之一&#xff0c;尤其适合那些希望一步到位&…

Golang 协程池 Ants 实现原理,附详细的图文说明和代码

Golang 协程池 Ants 实现原理&#xff0c;附详细的图文说明和代码。 1 前置知识点 1.1 sync.Locker sync.Locker 是 go 标准库 sync 下定义的锁接口&#xff1a; // A Locker represents an object that can be locked and unlocked. type Locker interface {Lock()Unlock() …

【C++11】多线程

多线程创建线程thread提供的成员函数获取线程id的方式线程函数参数的问题线程join场景和detach 互斥量库&#xff08;mutex&#xff09;mutexrecursive_mutexlock_guard 和 unique_lock 原子性操作库&#xff08;atomic&#xff09;条件变量库&#xff08;condition_varuable&a…

Linux 回收内存到底怎么计算anon/file回收比例,只是swappiness这么简单?

概述 Linux内核为了区分冷热内存,将page以链表的形式保存,主要分为5个链表,除去evictable,我们主要关注另外四个链表:active file/inactive file,active anon和inactive anon链表,可以看到这主要分为两类,file和anon page,内存紧张的时候,内核开始从inactive tail定…

上网Tips: Linux截取动态效果图工具_byzanz

链接1 链接2 安装&#xff1a; sudo apt-get install byzanz 查看指令 说明 byzanz-record --help日常操作 xwininfo点击 待录制窗口 左上角 byzanz-record -x 72 -y 64 -w 1848 -h 893 -d 10 --delay5 -c /home/xixi/myGIF/test.gif小工具 获取鼠标坐标 xdotool getm…