使用 Reactor 实现 http 限速服务重试
Implementing http ratelimited service retry with Reactor
我刚刚在 Java 开始使用 Reactor 3 进行反应式编程。我想使用 reactor-netty 为 http 服务实现一个客户端。到目前为止,我已经完美地发送了非常基本的 http 请求。但是,该服务希望客户端遵守速率限制(使用传统的 X-RateLimit-Limit
、X-RateLimit-Remaining
等通知客户端 headers)。
我想在请求受到速率限制时自动重试请求,但我不确定什么是最 "idiomatic" 或最有效的方法来使用反应流来执行此操作。我不能简单地睡在我的流线程中,所以我应该看什么呢?根据我目前所读的内容,我相信我想研究利用背压来完成这项任务,但我不确定从哪里开始。
对于这个可能比较宽泛的问题,我们深表歉意。
如果速率限制信号来自响应,实现此目的的一个好方法是将其转换为特定异常,通过响应 Mono
中的 onError
传播它并使用 retryWhen
延迟重试运算符。
在 reactor-extra
工件 (groupId io.projectreactor.addons
) 中,您有一个 Retry
实用程序 class 可以用作 Function
的构建器 retryWhen
.
我刚刚在 Java 开始使用 Reactor 3 进行反应式编程。我想使用 reactor-netty 为 http 服务实现一个客户端。到目前为止,我已经完美地发送了非常基本的 http 请求。但是,该服务希望客户端遵守速率限制(使用传统的 X-RateLimit-Limit
、X-RateLimit-Remaining
等通知客户端 headers)。
我想在请求受到速率限制时自动重试请求,但我不确定什么是最 "idiomatic" 或最有效的方法来使用反应流来执行此操作。我不能简单地睡在我的流线程中,所以我应该看什么呢?根据我目前所读的内容,我相信我想研究利用背压来完成这项任务,但我不确定从哪里开始。
对于这个可能比较宽泛的问题,我们深表歉意。
如果速率限制信号来自响应,实现此目的的一个好方法是将其转换为特定异常,通过响应 Mono
中的 onError
传播它并使用 retryWhen
延迟重试运算符。
在 reactor-extra
工件 (groupId io.projectreactor.addons
) 中,您有一个 Retry
实用程序 class 可以用作 Function
的构建器 retryWhen
.