我的编程空间,编程开发者的网络收藏夹
学习永远不晚

hystrix服务降级方法使用介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

hystrix服务降级方法使用介绍

当一个服务端的业务响应的时间过长的时候或者业务处理逻辑处理异常,不应该等待,应该给出一种处理方法

超时导致服务器变慢(转圈) --->超时不再等待

出错(宕机或程序运行出错) --->出错要有兜底

pom文件依赖 :

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

主启动类需要加注解:

@EnableHystrix

yml文件设置:

feign:
  hystrix:
    enabled: true

feign:hystrix:enabled: true的作用,官网解释“Feign将使用断路器包装所有方法”,也就是将@FeignClient标记的那个service接口下所有的方法进行了hystrix包装(类似于在这些方法上加了一个@HystrixCommand),这些方法会应用一个默认的超时时间为1s

情况1

  
    @HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",commandProperties = {
            @HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value="3000")
    })
    public String paymentInfo_TimeOut(Integer id)
    {
        int second = 5;
        try { TimeUnit.SECONDS.sleep(second); } catch (InterruptedException e) { e.printStackTrace(); }
        return "线程池:"+Thread.currentThread().getName()+"paymentInfo_TimeOut,id: "+id+"\t"+"O(∩_∩)O,耗费秒: "+second;
    }
    public String paymentInfo_TimeOutHandler(Integer id){
        return "/(ㄒoㄒ)/调用支付接口超时或异常:\t"+ "\t当前线程池名字" + Thread.currentThread().getName();
    }

@HystrixCommand(fallbackMethod = "paymentInfo_TimeOutHandler",

commandProperties ={@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",

value="3000")

})

@HystrixCommand:需要进行降级处理的业务处理方法的标注注解

fallbackMethod :发生时间过长的时候或运行错误的时候需要调用的方法

@HystrixProperty:相关参数设置,如上就是设置超时时间,超过了3s就调用方法

情况2:每个业务方法对应一个兜底的方法,代码膨胀,统一和自定义的分开

@RestController
@Slf4j
@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")
public class PaymentHystirxController
{
    @GetMapping("/consumer/payment/hystrix/timeout/{id}")
    @HystrixCommand //加了@DefaultProperties属性注解,并且没有写具体方法名字,就用统一全局的
    public String paymentInfo_TimeOut(@PathVariable("id") Integer id)
    {
        String result = paymentHystrixService.paymentInfo_TimeOut(id);
        return result;
    }
    public String paymentTimeOutFallbackMethod(@PathVariable("id") Integer id)
    {
        return "paymentTimeOutFallbackMethod,对方系统繁忙,请10秒钟后再次尝试/(ㄒoㄒ)/";
    }
    public String payment_Global_FallbackMethod()
    {
        return "Global异常处理信息,请稍后再试,/(ㄒoㄒ)/~~";
    }
}

@DefaultProperties(defaultFallback = "payment_Global_FallbackMethod")

defaultFallback :指定默认改控制类的所有标注了@HystrixCommand的控制方法降级处理都是名字为payment_Global_FallbackMethod

如果需要针对处理的,可以添加fallbackMethod 参数和情况1一样处理掉

情况3:和业务逻辑混一起???混乱

说明:当引发降级处理的时候,也可能是因为服务内部程序发生了错误或调用的服务宕机,这个时候就需要给客户处理的不再是“业务繁忙”而是“内部程序错误”

案列:现在有80服务调用8001端口的业务,但8001端口的服务突然出现宕机;80端口使用feign处理8001端口的调用

@Component
@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",
fallback = PaymentFallbackService.class)
public interface PaymentHystrixService
{
    @GetMapping("/payment/hystrix/ok/{id}")
    String paymentInfo_OK(@PathVariable("id") Integer id);
    @GetMapping("/payment/hystrix/timeout/{id}")
    String paymentInfo_TimeOut(@PathVariable("id") Integer id);
}

@FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT",

fallback = PaymentFallbackService.class)

value:是8001端口的服务名称

fallback :是该接口的实现类,也就是在80端口调用8001端口服务发生错误的时候需要进行的方法

@Component //必须加 //必须加 //必须加
public class PaymentFallbackService implements PaymentHystrixService
{
    @Override
    public String paymentInfo_OK(Integer id) {
        return "服务调用失败,提示来自:cloud-consumer-feign-order80";
    }
    @Override
    public String paymentInfo_TimeOut(Integer id) {
        return "服务调用失败,提示来自:cloud-consumer-feign-order80";
    }
}

补充 :

说明:现在有80端口控制类调用了8001端口业务处理类,但在8001端口这个服务也设置了服务降级,假设为5s超时处理,而80这边设置的服务降级为3s超时处理,现在业务响如果超过了3s,那么应该响应的是80端口这边的服务降级处理

到此这篇关于hystrix服务降级方法使用介绍的文章就介绍到这了,更多相关hystrix服务降级内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

hystrix服务降级方法使用介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring Cloud中Hystrix服务降级与异常处理的方法是什么

本篇内容主要讲解“Spring Cloud中Hystrix服务降级与异常处理的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Cloud中Hystrix服务降级与异常处理的
2023-06-19

JavaScriptreduce方法使用方法介绍

Reduce是个纯函数,即只要传入相同的参数,每次都应返回相同的结果。不要把和处理数据无关的代码放在Reduce里,让Reduce保持纯净,只是单纯地执行计算,这篇文章主要介绍了Redux拆分reduce函数流程
2022-11-13

mysqldump的使用方法介绍

这篇文章主要介绍了mysqldump的使用方法介绍,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。1、说明mysqldump在库被删除的情况下,无法直接从文件恢复,需要手动新建同名库,才能从文件恢复数据。2、语法shell
2023-06-15

ReactHooks使用方法全方位介绍

在react类组件(class)写法中,有setState和生命周期对状态进行管理,但是在函数组件中不存在这些,故引入hooks(版本:>=16.8),使开发者在非class的情况下使用更多react特性
2023-03-19

Jquery 的outerHeight方法使用介绍

获取第一个匹配元素外部高度默认包括补白和边框,在本文将为大家介绍下具体的实现代码,此方法对可见和隐藏元素均有效,感兴趣的朋友可以了解下
2022-11-15

GoLangcontext包的使用方法介绍

日常Go开发中,Context包是用的最多的一个了,几乎所有函数的第一个参数都是ctx,那么我们为什么要传递Context呢,Context又有哪些用法,底层实现是如何呢?相信你也一定会有探索的欲望,那么就跟着本篇文章,一起来学习吧
2023-03-15

Javainterrupt()方法使用实例介绍

一个线程在未正常结束之前,被强制终止是很危险的事情.因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。所以你看到Thread.suspend,Thread.stop等方法都被Deprecated了
2023-02-03

fastjson 使用方法详细介绍

Fastjson介绍Fastjson是一个Java语言编写的JSON处理器。1、遵循http://json.org标准,为其官方网站收录的参考实现之一。2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collecti
2023-05-30

android之HttpPostHttpGet使用方法介绍

直接讲用法,先知道怎么用,再知道怎么回事 1、HttpPost 代码如下: try{ //创建连接 HttpClient httpClient = new DefaultHttpClient(); HttpPost post = new
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录