Spring Cloud Hystrix使用

Spring Cloud :Hystrix实现优雅的服务容错 作为Spring Cloud体系内实现熔断机制的关键组件,Hystrix承担着服务容错保护的重要职责。它由Netflix开源,旨在为分布式系统提供延迟处理和容错解决方案。其核心作用在于引入延迟容忍与容错逻辑,精细管理分布式服务间的交互,确保系统的高可用性和鲁棒性。在复杂分布式系统环境中,往往涉及数十个应用,这些应用依赖于多个项目。不可避免地,每个依赖项目都有可能在某个时刻遭遇失败并触发故障。若未对这些故障实施有效隔离措施,整个分布式系统可能面临崩溃风险。 阅读详情

@EnableCircuitBreaker注解

使用@EnableCircuitBreaker注解开启断路器功能,另外@SpringCloudApplication注解也包含@EnableCircuitBreaker注解,以下为@SpringCloudApplication注解的源码

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {

}

引入Spring Cloud Hystrix

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

方法一:实现HystrixCommand

public class HelloHystrix extends HystrixCommand{
    @Autowired
    RestTemplate restTemplate;

    protected HelloHystrix(String threadKeyName, int timeout, int queueSize, int coreSize) {
        super(Setter.withGroupKey(
                //设置命令组
                HystrixCommandGroupKey.Factory.asKey("springHealthGrooup"))
                //设置命令键
                .andCommandKey(HystrixCommandKey.Factory.asKey("interventionKey"))
                //设置线程池键
                .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey(threadKeyName))
                //设置命令属性
                .andCommandPropertiesDefaults(
                        HystrixCommandProperties.Setter()
                        .withExecutionTimeoutInMilliseconds(timeout)
                )
                .andThreadPoolPropertiesDefaults(
                        HystrixThreadPoolProperties.Setter()
                        .withMaxQueueSize(queueSize)
                        .withCoreSize(coreSize)
                )
        );
    }

    @Override
    protected String run() throws Exception {
        return restTemplate.getForEntity("http://provider/hello",String.class).getBody();
    }
}

上述代码中的 HystrixCommandGroupKey 和 HystrixCommandKey 分别用来配置服务分组名称和服务名称,然后 HystrixThreadPoolKey 用来配置线程池的名称。

可以使用同步或异步的方式进行调用

//同步执行
Object result = new HelloHystrix("hystrix-thread", 5000, 5, 2).execute();
//异步执行
Future future = new HelloHystrix("hystrix-thread", 5000, 5, 2).queue();

除了传统的同步执行与异步执行之外, 我们还可以将  通过Observable 来实现响应式执行方式。

Observable ho = new HelloHystrix("hystrix-thread", 5000, 5, 2).observe();
Observable co = new HelloHystrix("hystrix-thread", 5000, 5, 2).toObservable();

        observe ()和toObservable ()虽然都返回了 Observable, 但是它们略有不同,前者返回的是一个 Hot Observable, 该命令会在 observe ()调用的时候立即执行, 当Observable 每次被订阅的时候会重放它的行为;而后者返回的是 一个 Cold Observable, toObservable ()执行之后,命令不会被立即执行,只有当所有订阅者都订阅它之后才会执行。

方法二:使用@HystrixCommand注解

@HystrixCommand源码如下:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface HystrixCommand {

    /**
     * The command group key is used for grouping together commands such as for reporting,
     * alerting, dashboards or team/library ownership.
     * <p/>
     * default => the runtime class name of annotated method
     *
     * @return group key
     */
    String groupKey() default "";

    /**
     * Hystrix command key.
     * <p/>
     * default => the name of annotated method. for example:
     * <code>
     *     ...
     *     @HystrixCommand
     *     public User getUserById(...)
     *     ...
     *     the command name will be: 'getUserById'
     * </code>
     *
     * @return command key
     */
    String commandKey() default "";

    /**
     * The thread-pool key is used to represent a
     * HystrixThreadPool for monitoring, metrics publishing, caching and other such uses.
     *
     * @return thread pool key
     */
    String threadPoolKey() default "";

    /**
     * Specifies a method to process fallback logic.
     * A fallback method should be defined in the same class where is HystrixCommand.
     * Also a fallback method should have same signature to a method which was invoked as hystrix command.
     * for example:
     * <code>
     *      @HystrixCommand(fallbackMethod = "getByIdFallback")
     *      public String getById(String id) {...}
     *
     *      private String getByIdFallback(String id) {...}
     * </code>
     * Also a fallback method can be annotated with {@link HystrixCommand}
     * <p/>
     * default => see {@link com.netflix.hystrix.contrib.javanica.command.GenericCommand#getFallback()}
     *
     * @return method name
     */
    String fallbackMethod() default "";

    /**
     * Specifies command properties.
     *
     * @return command properties
     */
    HystrixProperty[] commandProperties() default {};

    /**
     * Specifies thread pool properties.
     *
     * @return thread pool properties
     */
    HystrixProperty[] threadPoolProperties() default {};

    /**
     * Defines exceptions which should be ignored.
     * Optionally these can be wrapped in HystrixRuntimeException if raiseHystrixExceptions contains RUNTIME_EXCEPTION.
     *
     * @return exceptions to ignore
     */
    Class<? extends Throwable>[] ignoreExceptions() default {};

    /**
     * Specifies the mode that should be used to execute hystrix observable command.
     * For more information see {@link ObservableExecutionMode}.
     *
     * @return observable execution mode
     */
    ObservableExecutionMode observableExecutionMode() default ObservableExecutionMode.EAGER;

    /**
     * When includes RUNTIME_EXCEPTION, any exceptions that are not ignored are wrapped in HystrixRuntimeException.
     *
     * @return exceptions to wrap
     */
    HystrixException[] raiseHystrixExceptions() default {};

    /**
     * Specifies default fallback method for the command. If both {@link #fallbackMethod} and {@link #defaultFallback}
     * methods are specified then specific one is used.
     * note: default fallback method cannot have parameters, return type should be compatible with command return type.
     *
     * @return the name of default fallback method
     */
    String defaultFallback() default "";
}

示例:

@Service
public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand(threadPoolKey = "hystrixTest",
            threadPoolProperties = {
                    @HystrixProperty(name = "coreSize", value = "2"),
                    @HystrixProperty(name = "maxQueueSize", value = "10")
            },
            fallbackMethod = "helloFallback")
    public String helloService() {
        return restTemplate.getForEntity("http://provider/hello", String.class).getBody();
    }


    public String helloFallback() {
        return "error";
    }
}

@HystrixCommand用于指定一些应该作为 hystrix 命令处理的方法。该注解中的fallbackMethod属性用于指定熔断时的回调函数,用来实现服务的降级处理逻辑。

当provider服务不可用时,就会触发断路器,然后直接调用回调函数helloFallback函数

@HystrixCommand还提供了

@HystrixCommand(commandProperties = {

            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "12000"),

            //一个滑动窗口内最小的请求数
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),

            //错误比率阈值
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "75"),

           //触发熔断的时间值
        @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "7000"),

            //一个滑动窗口的时间长度
           @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "15000"),

            //一个滑动窗口被划分的数量
            @HystrixProperty(name = "metrics.rollingStats.numBuckets", value = "5") })

hystrix实现原理可参考:

Hystrix实现原理_skh2015java的博客-优快云博客icon-default.png?t=L9C2https://skaygo.blog.youkuaiyun.com/article/details/120750565

Spring Cloud Hystrix--熔断器 一、Hystrix 熔断器 1、引入pom org.springframework.boot spring-boot-starter-parent 1.3.5.RELEASE org.springframework.cloud spring-cloud-starter-ribbon org.springframework 阅读详情

相关推荐

Jetpack Compose Navigation实战:从基础到高级导航模式

本文全面解析Jetpack Compose Navigation在Android开发中的应用,从基础导航实现到高级模式(如单任务/单顶模式),涵盖参数传递、嵌套导航、深层链接等核心功能。通过实战代码示例展示如何优化导航性能,并与ViewModel、Hilt等架构组件整合,为开发者提供高效的Compose导航解决方案。

pz890123456的博客 378

Hystrix使用篇 - Hystrix的使用

本文介绍Hystrix的使用

The Secret 3916

zynq+LWIP 裸机双网口实现(MIO+EMIO)+程序下载

芯片型号: ZYNQ: XC7Z010clg400开发软件:Vivado2022 + Xilinx Vitis 2022网卡芯片:RTL8211FDI(需要根据网口芯片型号修改对应的硬件配置代码。

thinking in 小宇宙 3412

微服务——Hystrix的使用

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。包裹请求:使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用 了设计模式中的“命令模式”。跳闸机制:当某服务的错误率超过一定的阈值时,Hystrix可以自动或手动跳闸,停止请求该服务 一段时间。资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(或者信号量)。

weixin_53604412的博客 3159

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 670

微信小程序 - 解决支付报错 requestPayment:fail access denied (微信支付提示错误requestPayment:拒绝访问失败,真机运行测试或打包编译上线后报错问题)

微信小程序,微信支付,wx.requestPayment,微信小程序支付报错requestPayment:fail access denied,调不起微信,无法唤起支付弹窗,支付失败,支付权限没问题,小程序上线后支付报错,小程序真机测试支付报错,微信小程序苹果ios系统手机无法支付,小程序发布上线后支付报错,本地测试没问题,拒绝访问失败,小程序调起支付API requestPayment:fail:access denied微信开发者工具正常支付,权限没问题,微信公众平台,依旧报错怎么办,检查了appid都

🏆 前端领域优质创作者 1万+

【后端】Hystrix使用教程

通过遵循这些最佳实践和使用策略,你可以更好地利用Hystrix来增强你的微服务架构的稳定性和可靠性。同时,保持对系统性能和资源使用的监控,并不断优化和调整配置,以确保系统能够持续高效地运行。

大雨淅淅的博客 2890

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 438

Hystrix 使用

Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。如果某程序或class要使用Hystrix,只需简单继承HystrixCommand/HystrixObservableCommand并重写run()/construct(),然后调用程序实例化此class并执行execute()/queue()/observe()/toObservable()。 ...

赵英超的博客 1517

Linux ARM平台开发系列讲解(网络篇)1.3 MDIO总线设备device和设备driver匹配

在设备和驱动都载入内核后,设备和驱动是如何匹配起来的呢?其实他们就是通过的唯一标识phyID进行匹配phy_dev和phy_drv是通过phy_bus_match函数进行匹配,匹配成功后会建立链表链接,具体流程如下图: 返回总目录......

DSMGUOGUO的博客 1099

【x265编码器】章节6——x265的码率控制

对于CRF模式而言,右边这部分是是固定值m_rateFactorConstant,在初始化的时候确定,跟分辨率,qCompress这个参数是外部可设参数,默认值0.6,因此QP的选择只跟编码复杂度有关,跟码率无关,编码复杂度越高,QP值越高,因此可以一定程度上说CRF模式是恒定质量的编码模式。其中Complex表示当前帧的编码复杂度,x265中用lookahead模块计算的SATD作为衡量当前帧的复杂度,c为模型参数,qscale是率失真优化中的拉格朗日乘子,R为编码当前帧需要的比特数。

vcvdv123的博客 1万+

SpringCloud之Hystrix——详细使用

目录一、介绍1. 说明2. 作用二、服务雪崩1.服务雪崩2.图解雪崩效应 三、服务熔断 四、服务降级1.服务降级说明2.服务降级图示五、降级和熔断总结 六、服务熔断的实现1.服务熔断的实现思路2.项目中引入hystrix依赖 3.开启断路器4.使用HystrixCommand注解实现断路5.总结6.断路器打开条件 7.断路器流程​编辑8.默认的服务FallBack处理方法七、服务降级的实现1.客户端openfeign + hystrix实现服务降级实现2.开启openfeign支持服务降级3.在openfe

qq_63438013的博客 1663

第23章:代码迁移——用AI将Vue2迁移到Vue3、将JS迁移到TS

> - 用AI自动将Vue2 Options API转为Vue3 Composition API的完整流程 > - 将JavaScript项目批量迁移到TypeScript,自动添加类型推导 > - 处理依赖冲突、破坏性变更和迁移后的验证方法 > - 一个完整的Vue2到Vue3迁移案例(含路由、状态管理) > - 我如何用AI将公司一个10万行代码的老项目从JS升级到TS

sfishfly的博客 208

Spring Cloud 服务容错 Hystrix

Spring Cloud Hystrix 是服务容错的利器,它通过熔断、降级和隔离策略,有效提升了分布式系统的稳定性。在现代微服务架构中,服务容错机制是保障系统可靠性的基础。尽管 Hystrix 已进入维护模式,其设计理念和实践依然值得学习。对于新项目,开发者可以借助 Resilience4j 继承 Hystrix 的思想,同时享受更现代化的工具支持。在未来,服务容错将与服务网格(Service Mesh)深度结合,为系统提供更强大的稳定性保障。

Flying_Fish_roe的博客 1106

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring Cloud集成Hystrix

Spring Cloud Hystrix是一种实现断路器模式的工具,它是Netflix开源的Hystrix库的一个封装。通过Hystrix,您可以确保在服务调用失败或延迟时,系统不会完全崩溃,而是提供一个回退(fallback)方案,从而提高系统的稳定性和弹性。

golove666的博客 1248

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring Cloud Netflix Hystrix

目录 一、 Hystrix 简介 1 什么是灾难性雪崩效应 2 什么是 Hystrix 二、 服务降级 1 修改 application service 代码 2 application client POM 依赖 3 application client 容错处理代码 4 application client 配置文件 application.yml 5 application client 启动类 三、 服务熔断 1 application client POM 依赖...

m0_51343808的博客 3306

spring cloud Hystrix

spring cloud Hystrix 文章目录spring cloud Hystrixpom.xml依赖开启短路器功能服务降级@HystrixCommand的fallbackMethod配置默认的服务降级方法使用openfeign中的hystrix配置application.yml@FeignClient的fallback属性配置服务降级的类服务熔断@HystrixCommand配置断路器使用案例Hystrix的仪表盘pom.xml依赖启动类访问接口监控展示报错Unable to connect to

qq_43203949的博客 184

spring cloud hystrix dashboard

关键字背景上一节我们讲到了断路器(Hystrix ),Hystrix 可以在系统不稳定时及时断开外部请求,防止雪崩,以达到保护系统的整体稳定性。但是由于这些操作都由Hystrix 自动完成,开发人员无法获知到底哪些服务有问题,以及相应请求的成功率、响应时间等信息以备后续分析和改进。如果有一款工具可以让我们能直观的看到各服务的实时健康信息,就可以轻松的分析每个服务的调用情况,并能及时分析和解决对应的系

老杨叔叔 1166

spring cloud netflix hystrix的替代产品

spring cloud 整合了 netflix 的一个很多的熔断处理的组件,即 hystrix。但是在最后一个版本 1.5.18 在 2018.11.16 发布后,进入了维护模式,即没有新特性对外发布了,即使有问题也只能那样了。

zlpzlpzyd的专栏 2358

[Spring Cloud] Spring Cloud Hystrix

Spring Cloud Hystrix 目录Spring Cloud HystrixHystrix特性断路器机制Fallback资源隔离服务熔断服务降级测试REFERENCES更多 手机用户请横屏获取最佳阅读体验,REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。 平台 地址 优快云 https://blog.youkuaiyun.com/sina...

架构探险之道 828

Spring Cloud Hystrix 参数配置、简单使用、DashBoard

Spring Cloud Hystrix 是一款优秀的服务容错与保护组件,也是 Spring Cloud 中最重要的组件之一。Spring Cloud Hystrix 是基于 Netflix 公司的开源组件 Hystrix 实现的,它提供了熔断器功能,能够有效地阻止分布式微服务系统中出现联动故障,以提高微服务系统的弹性。Spring Cloud Hystrix 具有服务降级、服务熔断、线程隔离、请求缓存、请求合并以及实时故障监控等强大功能。

qq_36944952的博客 3922

Spring Cloud 之 Hystrix

本文学习Spring Cloud 中Hystrix的使用,学习熔断、降级、限流等在分布式系统中的运用。

风儿甚是喧嚣的博客 3106

Spring Cloud Hystrix实现原理

Hystrix实现原理 在了解hystrix的工作原理之前,我们先来了解一下命令模式 命令模式 命令模式的定义:将请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,以及支持可撤销和恢复的功能。 命令模式常用的对象 Command:请求封装成的对象,该对象是命令模式的主角。也就是说将请求方法封装成一个命令对象,通过操作命令对象来操作请求方法。在命令模式是有若干个请求的,需要将这些请求封装成一条条命令对象,客户端只需要调用不同的命令就可以达到将请求参数化的目的。将一条条请求封装成一条条.

skh2015java的博客 893
上一篇: Hystrix实现原理
下一篇: TestNG使用(一)——TestNG介绍
思维的深度
博客等级 码龄11年 2万+粉丝 391原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值