IllegalStateException in retryWhen with ReadStreamAdapter

IllegalStateException in retryWhen with ReadStreamAdapter

当对我的一项外部服务的外部 http 请求失败时,我正在使用 retryWhen。 问题是我正在使用

  RxHelper.toObservable(httpClient.request(method, url))

为了获得我可观察到的响应,并且因为 vertx 在内部使用 ReadStreamAdapter 我不能使用 retryWhen 因为它抱怨

 java java.lang.IllegalStateException: Request already complete

这是一个代码示例:

  RxHelper.toObservable(httpClient.request(method, url))
  .retryWhen(new ServiceExceptionRetry())       
  .subscribe(f -> replySuccess(eventMsg, event, f), t -> handleError(t, eventMsg, event));

知道如何实现吗?

您可以每次都使用 defermethodclient 创建一个 Observable,如下所示:

 Observable.defer(() -> RxHelper.toObservable(httpClient.request(method, url)))
  .retryWhen(new ServiceExceptionRetry())       
  .subscribe(f -> replySuccess(eventMsg, event, f), t -> handleError(t, eventMsg, event));