demo(三)eurekaribbonhystrix----服务降级熔断

一、介绍:

1、雪崩: 多个微服务之间调用的时候,假如微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的"扇出"。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用,对微服A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即"雪崩效应"。对于高流量的应用来说,单一的后端依赖可能会导致所有的服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。所以,通常当一个模块下的某个实例失败后,这时候这个模块依然还会接收流量,然后这个有问题的模块还调用了其他的模块,这样就会发生级联故障,或者叫雪崩。

2、hystrix概念:

①Hystrix是一个用于处理分布式系统的延迟和容错的开源库,可以保证一个服务出现故障时,不会导致整个系统出现雪崩效应,以提高分布式系统弹性;

②作为“断路器”,在一个服务出现故障时,可以通过短路器监控,返回一个可以处理的响应结果,保证服务调用线程不会长时间被占用,避免故障蔓延。

3、作用:

(1)服务降级:

服务出现故障时,给故障服务降级到事先准备好的故障处理结果,将此结果返回给服务消费者,如:客户端访问服务1,服务1调用服务2,服务2出现故障,Hystrix服务降级,返回一个可以处理的结果给服务1,服务1再以友好的错误界面返回给客户端。

主要通过@HystriCommand注解方法实现,其中有两个关键参数,

  fallbackMethod:指定服务降级后调用方法,降级方法出参入参一定要和controller方法一致;

    commandProperties:相关参数。

(2)服务熔断:参数设置

①circuitBreaker.enabled:是否开启熔断;

②circuitBreaker.requestVolumeThreshold:当前服务失败几次后开启断路,默认20次;

③circuitBreaker.sleepWindowInMilliseconds:设置断路时间,过了该时间后会尝试恢复,在断路时间内,即使请求正确也会走降级方法;

 熔断类型

 ①熔断打开  打开后,在此时间内不会对该服务进行调用,而是直接访问降级方法。通过设置熔断时间,当达到该时间后,会尝试恢复该服务。

②熔断关闭  熔断关闭代表服务正常,不会干扰正常服务调用。

③熔断半开  熔断半开时,请求可以访问服务,若请求正常访问,则熔断会关闭;若请请求不正常,继续熔断,调用降级方法。

 4、使用介绍:

(1)pom依赖:

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

(2)@EnableCircuitBreaker类注解:项目启动类加上此注解,表示开启Hystrix。

二、服务降级demo:服务提供者、服务消费者都可以进行自身降级。在之前的基础上:

1、myspringcloud-eureka-client服务提供者组件降级:

(1)加上pom依赖

(2)加上@EnableCircuitBreaker注解

@SpringBootApplication
@EnableEurekaClient
@MapperScan("com.demo.cloud.dao")
@EnableCircuitBreaker
public class MyEurekaClientApplication {
    public static void main(String args[]){
        SpringApplication.run(MyEurekaClientApplication.class,args);
    }
}

(3) 接口降级:

package com.demo.cloud.controller;

@RequestMapping("/test")
@RestController
public class TestApiController {

    @Value("${server.port}")
    private String currPort;


    @HystrixCommand(fallbackMethod = "TimeoutHandler", commandProperties = {
            //2秒钟以内就是正常的业务逻辑
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
    })
    @GetMapping("timeout")
    public String timeout() {
        try {
            //睡眠3秒
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "服务提供者正常返回";
    }

    //降级后方法,上面方法出问题,我来处理,返回一个出错信息
    public String TimeoutHandler() {
        return "我是服务提供者,当前不可用,请稍后再试";
    }
}

此时访问localhost:2222/myService/test/timeout

 

2、服务消费者myspringcloud-eureka-ribbon组件降级:步骤和上面差不多,不重复了,看接口降级

 @RequestMapping("/findByUserName")
    @HystrixCommand(fallbackMethod = "TimeoutHandler", commandProperties = {
            //2秒钟以内就是正常的业务逻辑
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000")
    })
    public UserDTO findByUserName(String username){
        try {
            //睡眠3秒
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        HashMap<String,String> paramMap = new HashMap<>();
        paramMap.put("username",username);
        UserDTO userDTO = restTemplate.getForObject(REST_URL_PREFIX+"/user/findByUserName?username={username}",UserDTO.class,paramMap);
        return userDTO;
    }

    //降级后方法,上面方法出问题,我来处理,返回一个出错信息
     public UserDTO TimeoutHandler(String username) {
        System.out.println("我是服务消费者,当前不可用,请稍后再试");
        return null;
    }

可以看到返回为空,成功调用了降级方法。

三、服务熔断

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【flutter】使用getx下的GetMaterialApp创建路由和使用时间选择器国际化问题

GetMaterialApp是啥 网上解释说是 MaterialApp Getx properties GetMaterialApp 问题 在使用showDateRangePicker组件的时候&#xff0c; 一直报错 No MaterialLocalizations found 我就愁思是不是GetMaterialApp跟MaterialApp方法不一样的问题&#xff0c;结果不是&#…

【7】Spring Boot 3 集成组件:缓存组件 spring cache + spring data redis

目录 【7】Spring Boot 3 集成组件&#xff1a;缓存组件 spring cache spring data redis什么是缓存抽象声明式注解JSR-107对应SpEL上下文数据 引入依赖cache 支持的缓存类型缓存类型配置NONESIMPLEREDIS自定义配置 CAFFEINE Hazelcast...总结 个人主页: 【⭐️个人主页】 需要…

【第2章 Node.js基础】2.7 Node.js 的流(一) 可读流

&#x1f308; Node.js 的流 &#x1f680;什么是流 流不是 Node.js 特有的概念。它们是几十年前在 Unix 操作系统中引入的。 我们可以把流看作这些数据的集合&#xff0c;就像液体一样&#xff0c;我们先把这些液体保存在一个容器里&#xff08;流的内部缓冲区 BufferList&…

Windows SmartScreen中的漏洞!

&#x1f525;另一个流行漏洞是 CVE-2023-36025 - 绕过 Windows SmartScreen 安全功能&#xff0c;该功能是多个微软产品的网络钓鱼和恶意软件保护组件。 &#x1f47e;有多危险 利用该漏洞&#xff0c;攻击者可以绕过 Windows Defender SmartScreen 检查和相关警告。利用该漏…

【Python】Pandas(学习笔记)

一、Pandas概述 1、Pandas介绍 2008年WesMcKinney开发出的库&#xff0c;专门用于数据挖掘的开源python库 以Numpy为基础&#xff0c;借力Numpy模块在计算方面性能高的优势 基于matplotib&#xff0c;能够简便的画图 独特的数据结构 import pandas as pd2、Pandas优势 便…

Dart 3.2 更新,Flutter Web 的未来越来越明朗

参考原文&#xff1a;https://medium.com/dartlang/dart-3-2-c8de8fe1b91f 本次跟随 Flutter 3.16 发布 的 Dart 3.2 &#xff0c;包含有&#xff1a;私有 final 字段的非空改进、新的 interop 改进、对 DevTools 中的扩展支持、以及对 Web 路线图的更新&#xff0c;包括对 Was…

Unity开发之C#基础-集合(字典)(Dictionary)

前言 Hello 兄弟们 一转眼俩月又过去了&#xff08;失踪人口回归&#xff09; 不出意外的是出意外了 失踪了两个月 有点对不起我这为数不多的粉丝们 实不相瞒忙的焦头烂额 也没心情写博客 实在对不住各位 好了长话短说 今天这篇文章是讲解c#当中的新的一种集合的表现&#xff…

ProtocolBuffers(protobuf)详解

目录 前言特点语法定义关键字JSON与Protocol Buffers互相转换gRPC与Protocol Buffers的关系 前言 Protocol Buffers&#xff08;通常简称为protobuf&#xff09;是Google公司开发的一种数据描述语言&#xff0c;它能够将结构化数据序列化&#xff0c;可用于数据存储、通信协议…

pip 问题

升级pip命令&#xff1a; python -m pip install --upgrade pippip不能下载pytorch&#xff1a; 这个问题我一直没解决。不知道有哪位大佬可以留言给我。把whl文件下载到本地也没有&#xff0c;pip不会进行本地文件夹搜索。

园区网络项目实战

实验背景 某写字楼备搭建一张网络供楼内企业办公使用。写字楼共6层&#xff0c;目前已有三层投入使用&#xff0c;分别 是一层会客大厅、二层行政部及总经理办公室、三层研发部和市场部。一层设有核心机房&#xff0c;其 他各楼层均有一个小房间放置网络设备。 第一步 询…

程序员如何悄悄拔尖,然后惊艳四座?

谁最初还不是个血气方刚、胸怀抱负的有志青年了&#xff1f; 渐渐的&#xff0c;被岁月磨平棱角&#xff0c;被生活冲淡理想&#xff0c;如今的你还有几分似从前&#xff1f; 你是否&#xff0c;不安现状、焦虑未来、忙忙碌碌没有方向&#xff1f; 不甘平庸?不想摸鱼&#…

【LeetCode刷题-滑动窗口】--1004.最大连续1的个数III

1004.最大连续1的个数III 方法&#xff1a;滑动窗口 class Solution {public int longestOnes(int[] nums, int k) {int left 0,right 0,zero 0,res 0;while(right < nums.length){if(nums[right]0){zero;}while(zero > k){if(nums[left] 0){zero--;}left;}res Ma…

深度系统(Deepin)开机无法登录,提示等待一千五百分钟

深度系统&#xff08;Deepin&#xff09;20.0&#xff0c; 某次开机无法登录&#xff0c;提示等待一千五百分钟。 &#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 用电脑这么多年&#xff0c;头一回遇到这种…

大数据Doris(二十四):数据导入(Stream Load)介绍

文章目录 数据导入(Stream Load)介绍 一、适用场景 二、基本原理

AE 的软件、硬件、驱动控制、调试策略(没有算法)

#灵感# AE是个值得推敲再推敲的模块&#xff0c;有意思。 目录 相关的硬件-光圈&#xff1a; 相关的软件-曝光-ISO&#xff1a; ISP中的sensor AE 组成&#xff1a; sensor AE的流程及控制&#xff1a; tuning时AE的一些策略&#xff1a; 相关的硬件-光圈&#xff1a; 光…

低代码平台排名及评析一览:谁是最具潜力的Top5?

在数字化时代&#xff0c;低代码平台已经逐渐成为企业快速开发应用的首选工具。众多低代码平台涌现市场&#xff0c;但谁才是最具潜力的Top 5呢&#xff1f;本文将为您揭示并评析这些领先的平台。 云表平台&#xff1a;能开发复杂管理系统的企业级低代码平台 一、平台背景 云表…

Spring Cloud Netflix微服务组件-Hystrix

目录 Hystrix的主要功能 传统容错手段 超时机制 应用容错三板斧 超时机制 舱壁隔离 熔断降级 侵入式Command用法 改进版一&#xff1a;ribbon与hystrix组合 改进版二&#xff1a;feign与hystrix组合 Hystrix三态转换图 源码分析 流程图 核心逻辑流程图 核心实现…

ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2308.04352 开源代码&#xff1a;http://3d-vista.github.io 摘要&#xff1a; 3D视觉语言标定&#xff08;3D-VL&#xff09;是一个新兴领域&#xff0c;旨在将…

【Java 进阶篇】JQuery 遍历:发现元素的魔法之旅

欢迎来到 JQuery 的奇妙世界&#xff0c;一个充满活力和灵感的地方。在这个世界里&#xff0c;我们将一起探讨 JQuery 的遍历功能&#xff0c;这是一个让你轻松发现和操作网页元素的神奇工具。无需太多前端经验&#xff0c;只要有一颗探险的心&#xff0c;你就能在 JQuery 遍历…

一个项目进行测试的一些最基本环境

在一个项目开发到发布的整个过程中&#xff0c;会使用到很多个环境进行测试和运行项目。最基本的开发环境、测试环境、准生产环境、生成环境 一、开发环境 开发环境顾名思义就是我们程序猿自己把项目放到自己的电脑上&#xff0c;配置好以后&#xff0c;跑起来项目&#xff0…