Hystrix原理之CommandExecutor是如何实现?
【摘要】 前面介绍了HystrixCommand的相关实现,本文将会继续介绍异步相关的细节。在Hystrix中使用RxJava的异步库来完成其中的命令执行,涉及到rx中的相关内容,仅作简单介绍,更复杂和详细的内容,可以参考rx的官方文档加深理解。CommandExecutor中根据MetaHolder中的ExecutionType执行类型的不同,选择同步执行、异步执行还是响应式执行,返回不同的执行结果...
前面介绍了HystrixCommand的相关实现,本文将会继续介绍异步相关的细节。
在Hystrix
中使用RxJava的异步库来完成其中的命令执行,涉及到rx中的相关内容,仅作简单介绍,更复杂和详细的内容,可以参考rx的官方文档加深理解。
CommandExecutor
中根据MetaHolder
中的ExecutionType
执行类型的不同,选择同步执行、异步执行还是响应式执行,返回不同的执行结果。
public static Object execute(HystrixInvokable invokable, ExecutionType executionType, MetaHolder metaHolder) throws RuntimeException {
...
switch (executionType) {
case SYNCHRONOUS: {
// 同步执行
return castToExecutable(invokable, executionType).execute();
}
case ASYNCHRONOUS: {
// 异步执行
HystrixExecutable executable = castToExecutable(invokable, executionType);
if (metaHolder.hasFallbackMethodCommand()
&& ExecutionType.ASYNCHRONOUS == metaHolder.getFallbackExecutionType()) {
return new FutureDecorator(executable.queue());
}
return executable.queue();
}
case OBSERVABLE: {
// 异步回调执行
HystrixObservable observable = castToObservable(invokable);
return ObservableExecutionMode.EAGER == metaHolder.getObservableExecutionMode() ? observable.observe() : observable.toObservable();
}
default:
throw new RuntimeException("unsupported execution type: " + executionType);
}
}
同步执行,直接返回结果的Object;异步执行,返回Future,封装了异步操作的结果;最后是异步回调执行,返回了Observable,封装响应式操作的结果,可以通过它对执行的结果进行订阅,在执行结束后进行特定的操作。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)