我在我的项目中使用 Rx+Retrofit。将创建所谓的 API 缓存来保存失败的 POST 请求。然后我需要再次发送缓存的请求。那么使用 Rx 处理不同 API 请求队列的最佳方法是什么?如果某些请求失败,则不应阻塞请求队列。也许 Rx 有一些更好的方法而不是简单的递归。谢谢。
您可以使用 retryWhen 运算符以及自定义逻辑来重试失败的请求。
创建一个用于 API 缓存的类/ 使用 PublishSubject 进行队列/ 实现重试逻辑
PublishSubject<ReqType> requestQueue = PublishSubject.create();
requestQueue.flatMap(request -> {
return apiService.makePostRequest(request)
.retryWhen(errors -> errors
.flatMap(error -> {
if (shouldRetry(error)) {
// Retry the request after a delay
return Observable.timer(timeinmillis, TimeUnit.SECONDS);
} else {
// Don't retry. propagate the error
return Observable.error(error);
}
})
);
})
.subscribe(
response -> {
// Handle the successful response
},
throwable -> {
// Handle the final error after retries
}
);
每当您想要发出 POST 请求时,请使用 requestQueue.onNext(req) 将其排入队列。