使用 Reactor 实现 http 限速服务重试

Implementing http ratelimited service retry with Reactor

我刚刚在 Java 开始使用 Reactor 3 进行反应式编程。我想使用 reactor-netty 为 http 服务实现一个客户端。到目前为止,我已经完美地发送了非常基本的 http 请求。但是,该服务希望客户端遵守速率限制(使用传统的 X-RateLimit-LimitX-RateLimit-Remaining 等通知客户端 headers)。

我想在请求受到速率限制时自动重试请求,但我不确定什么是最 "idiomatic" 或最有效的方法来使用反应流来执行此操作。我不能简单地睡在我的流线程中,所以我应该看什么呢?根据我目前所读的内容,我相信我想研究利用背压来完成这项任务,但我不确定从哪里开始。

对于这个可能比较宽泛的问题,我们深表歉意。

如果速率限制信号来自响应,实现此目的的一个好方法是将其转换为特定异常,通过响应 Mono 中的 onError 传播它并使用 retryWhen 延迟重试运算符。

reactor-extra 工件 (groupId io.projectreactor.addons) 中,您有一个 Retry 实用程序 class 可以用作 Function 的构建器 retryWhen.