Hystrix原理之核心类解析
【摘要】 首先我们通过官网的流程图来了解一下当我们通过Hystrix来包装我们远程调用后的流程,如下图所示:简单的流程的序号介绍如下:构建HystrixCommand或者HystrixObservableCommand对象;执行命令;是否有Response缓存;是否断路器打开;是否线程池或者队列或者信号量被消耗完;HystrixObservableCommand.construct() or Hyst...
首先我们通过官网的流程图来了解一下当我们通过Hystrix来包装我们远程调用后的流程,如下图所示:
简单的流程的序号介绍如下:
- 构建
HystrixCommand
或者HystrixObservableCommand
对象; - 执行命令;
- 是否有Response缓存;
- 是否断路器打开;
- 是否线程池或者队列或者信号量被消耗完;
HystrixObservableCommand.construct()
orHystrixCommand.run()
;- 计算链路的健康情况;
- 获取fallback逻辑;
- 返回成功的Response;
接着我们通过源码来逐步理解这些过程。
Command
@HystrixCommand
在入门中,是通过@HystrixCommand
的注解的方式包装了需要保护的远程调用方法,如下:
@HystrixCommand(fallbackMethod = "instanceInfoGetFail")
public Instance getInstanceByServiceIdWithRestTemplate(String serviceId){
Instance instance = restTemplate.getForEntity("http://FEIGN-SERVICE/feign-service/instance/{serviceId}", Instance.class, serviceId).getBody();
return instance;
}
首先查看该注解的相关属性:
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface HystrixCommand {
// 命令分组键用于报告、预警以及面板
// 默认被注解方法的运行时类名
String groupKey() default "";
// Hystrix的命令键,用于区分不同的注解方法
// 默认为注解方法的名称
String commandKey() default "";
// 线程池键用来表示被监控、度量发布、缓存和其他用处的HystrixThreadPool
String threadPoolKey() default "";
// 指定fallback方法名,fallback方法也可以被HystrixCommand注解
String fallbackMethod() default "";
// 自定义command的相关配置
HystrixProperty[] commandProperties() default {};
// 自定义线程池的相关配置
HystrixProperty[] threadPoolProperties() default {};
// 定义忽略哪一些异常
Class<? extends Throwable>[] ignoreExceptions() default {};
// 指定执行hystrix observable command的mode,快速执行还式懒执行
ObservableExecutionMode observableExecutionMode() default ObservableExecutionMode.EAGER;
HystrixException[] raiseHystrixExceptions() default {};
// 默认的fallback
String defaultFallback() default "";
}
一般来说,对于HystrixCommand
的配置,仅需要关注fallbackMethod()
,当然如果有对command和线程池有特定需要的也可以进行额外的配置。
上面就是对 HystrixCommand 的介绍,接下来将会继续介绍HystrixCommandAspect的实现。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)