1
votes

I´m using retryWhen when a external http request to one of my external services fails. The problem is that I´m using

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

To get my observable response, and becuase vertx internally use ReadStreamAdapter I cannot use the retryWhen because it´s complain

 java java.lang.IllegalStateException: Request already complete

Here a code example:

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

Any idea how to achieve this?

1

1 Answers

3
votes

You can use defer to create an Observable from method and client every time like this:

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