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));
知道如何实现吗?
您可以每次都使用 defer
从 method
和 client
创建一个 Observable,如下所示:
Observable.defer(() -> RxHelper.toObservable(httpClient.request(method, url)))
.retryWhen(new ServiceExceptionRetry())
.subscribe(f -> replySuccess(eventMsg, event, f), t -> handleError(t, eventMsg, event));
当对我的一项外部服务的外部 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));
知道如何实现吗?
您可以每次都使用 defer
从 method
和 client
创建一个 Observable,如下所示:
Observable.defer(() -> RxHelper.toObservable(httpClient.request(method, url)))
.retryWhen(new ServiceExceptionRetry())
.subscribe(f -> replySuccess(eventMsg, event, f), t -> handleError(t, eventMsg, event));