spring-boot - 在 Project reactor 中重复请求的最佳方式
问题描述
我是响应式编程的新手。
我们在 SpringBoot 中有一个使用 project-reactor 的应用程序。在此内部,我们向第三方服务发出 HTTP 请求并获得 Mono 作为结果。
fun getResultFromService() : Mono<Result> {
//requesting the third party REST API
}
我想:
- 检查响应代码
- 对于某些值,重复请求 M 次,它们之间有 N 秒的差异
- 最好的方法是什么?
- 我应该用什么代替
Thread.sleep()
- 我查了一下
repeatWhenEmpty
,我认为它不只适合 M 尝试。
解决方案
关键是你需要将错误响应代码转换成 Mono 上的错误。完成此操作后,您可以使用Michael Berry在评论中提到的 retryBackoff 运算符。
fun main()
{
getResultFromService()
.flatMap {
if (it.statusCode == 500 )
Mono.error(RuntimeException("Error which should be retried"))
else Mono.just(it)
}.retryBackoff(3, Duration.ofMillis(500), Duration.ofMillis(500))
.block()
}
fun getResultFromService() : Mono<Result>
{
//requesting the third party REST API
TODO("Implement it.")
}
data class Result(
val statusCode: Int,
val response: Any
)
推荐阅读
- javascript - 为什么我不能在我的 React 应用程序中使用“npm start”?
- spring - how to stop default query on id when using @cacheable annotation
- reactjs - React redux props undefined
- javascript - Javascript prevent decrement past 0
- python - 您如何处理在 Python 中生成许多变量或对象的任务?
- c++ - 什么是“#include
“? - python-3.x - 在特定小时之间每 10 秒运行一次 bash 脚本
- c# - Handle Linq queries outputs
- python - 在python中使用for循环时如何更新列表
- javascript - 动态创建的字段/ID 中的 foreach 解决方案