吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1383|回复: 4
收起左侧

[学习记录] SpringCloud学习心得---Hystrix熔断机制

[复制链接]
zyt温柔发 发表于 2022-2-17 16:56
本帖最后由 zyt温柔发 于 2022-2-17 17:04 编辑

8 Hystrix
    8.1服务熔断机制
     熔断机制是应对雪崩效应的一种微服务链路保护机制。
     当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速响应错误信息。当检测到该节点微服务调用响应正常后恢复调用链路。在 SpringCloud 框架里熔断机制通过 Hystrix 实现。Hystrix 会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是 5 秒内 20 次调用失败就会启动熔断机制。熔断机制的注解是@HystrixCommand
熔断.png
8.1.1 依赖信息
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

8.1.2 主启动类注解
[Java] 纯文本查看 复制代码
// 使用@EnableCircuitBreaker注解开启断路器功能
@EnableCircuitBreaker
@SpringBootApplication
public class AtzytMainType {
    public static void main(String[] args) {
        SpringApplication.run(AtzytMainType.class, args);
    }
}

8.1.3 ResultEntity(统一使用这个类型作为 Ajax 请求或远程方法调用返回响应的数据格式)
[Java] 纯文本查看 复制代码
package com.study.spring.cloud.util;

/**
 * 整个项目统一使用这个类型作为Ajax请求或远程方法调用返回响应的数据格式
 * [url=home.php?mod=space&uid=686208]@AuThor[/url] Lenovo
 *
 * [url=home.php?mod=space&uid=952169]@Param[/url] <T>
 */
public class ResultEntity<T> {
        
        public static final String SUCCESS = "SUCCESS";
        public static final String FAILED = "FAILED";
        public static final String NO_MESSAGE = "NO_MESSAGE";
        public static final String NO_DATA = "NO_DATA";
        
        /**
         * 操作成功,不需要返回数据
         * @return
         */
        public static ResultEntity<String> successWithoutData() {
                return new ResultEntity<String>(SUCCESS, NO_MESSAGE, NO_DATA);
        }
        
        /**
         * 操作成功,需要返回数据
         * @param data
         * @return
         */
        public static <E> ResultEntity<E> successWithData(E data) {
                return new ResultEntity<>(SUCCESS, NO_MESSAGE, data);
        }
        
        /**
         * 操作失败,返回错误消息
         * @param message
         * @return
         */
        public static <E> ResultEntity<E> failed(String message) {
                return new ResultEntity<>(FAILED, message, null);
        }
        
        private String result;
        private String message;
        private T data;
        
        public ResultEntity() {
                
        }

        public ResultEntity(String result, String message, T data) {
                super();
                this.result = result;
                this.message = message;
                this.data = data;
        }

        @Override
        public String toString() {
                return "ResultEntity [result=" + result + ", message=" + message + ", data=" + data + "]";
        }

        public String getResult() {
                return result;
        }

        public void setResult(String result) {
                this.result = result;
        }

        public String getMessage() {
                return message;
        }

        public void setMessage(String message) {
                this.message = message;
        }

        public T getData() {
                return data;
        }

        public void setData(T data) {
                this.data = data;
        }

}

8.1.4 handler 方法
[Java] 纯文本查看 复制代码
    // @HystrixCommand注解指定当前方法出问题时调用的备份方法(使用fallbackMethod属性指定)
    @HystrixCommand(fallbackMethod = "getEmpWithCircuitBreakerBackup")
    @RequestMapping("/provider/get/emp/with/circuit/breaker")
    public ResultEntity<Employee> getEmpWithCircuitBreaker(@RequestParam("signal") String signal) throws InterruptedException {

        if("quick-bang".equals(signal)) {
            throw new RuntimeException();
        }

        if("slow-bang".equals(signal)) {
            Thread.sleep(5000);
        }

        return ResultEntity.successWithData(new Employee(666, "empName666", 666.66));
    }

    public ResultEntity<Employee> getEmpWithCircuitBreakerBackup(@RequestParam("signal") String signal) {

        String message = "方法执行出现问题,执行断路 signal="+signal;

        return ResultEntity.failed(message);
    }

测试效果:
正常访问:
zhengchang.png
异常访问:

异常1

异常1

异常2.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

咔c君 发表于 2022-2-17 18:48
学习了不错
zdychina 发表于 2022-2-17 19:28
atai 发表于 2022-2-17 21:06
 楼主| zyt温柔发 发表于 2022-2-17 21:29
atai 发表于 2022-2-17 21:06
楼主几年工作经验啊?

上班两年了,最近有空学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表