1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
final class ObservableCompletableFuture<T> extends CompletableFuture<T> {

  private final Subscription sub;

  ObservableCompletableFuture(final HystrixCommand<T> command) {
    this.sub = command.toObservable().single().subscribe(ObservableCompletableFuture.this::complete,
        ObservableCompletableFuture.this::completeExceptionally);
  }


  @Override
  public boolean cancel(final boolean b) {
    sub.unsubscribe();
    return super.cancel(b);
  }
}

此方式从HystrixInvocationHandler获得,由于feign-hystrix支持返回CompletableFuture,那么只需查看其源码即可完美复制。

由于ObservableCompletableFuture属于非public类,想要使用,我们自定义一个一样的即可。