# 101. hystirx 的 fail-fast 与 fail-silient 两种最基础的容错模式
下面几节是 HystrixCommand 和 HystrixObservableCommand 的常见用法和使用模式。
# fail-fast
没有 fallback 降级逻辑,报错的话,异常可以被捕获到
public class CommandThatFailsFast extends HystrixCommand<String> {
private final boolean throwException;
public CommandThatFailsFast(boolean throwException) {
super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
this.throwException = throwException;
}
@Override
protected String run() {
if (throwException) {
throw new RuntimeException("failure from CommandThatFailsFast");
} else {
return "success";
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Test
public void testFailure2() {
try {
new CommandThatFailsFast(true).execute();
} catch (HystrixRuntimeException e) {
// 异常可以被捕获到
System.out.println("xxx");
assertEquals("failure from CommandThatFailsFast", e.getCause().getMessage());
e.printStackTrace();
// 如果提供了降级机制,那么这里就不会被捕获到异常
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# fail-silent
有 fallback 降级逻辑;如果执行报错了,会走 fallback 降级,返回 fallback 的值给你
HystrixCommand
@Override
protected String getFallback() {
return "降级机制";
}
1
2
3
4
2
3
4
HystrixObservableCommand
@Override
protected Observable<String> resumeWithFallback() {
return Observable.empty();
}
1
2
3
4
2
3
4
很少会用 fail-fast 模式,比较常用的可能还是 fail-silent,特别常用,既然都到了 fallback 里面,肯定要做点降级的事情