首页 > 解决方案 > 在 Project reactor 中重复请求的最佳方式

问题描述

我是响应式编程的新手。

我们在 SpringBoot 中有一个使用 project-reactor 的应用程序。在此内部,我们向第三方服务发出 HTTP 请求并获得 Mono 作为结果。

fun getResultFromService() : Mono<Result> {
   //requesting the third party REST API
}

我想:

  1. 检查响应代码
  2. 对于某些值,重复请求 M 次,它们之间有 N 秒的差异

标签: spring-bootkotlinproject-reactor

解决方案


关键是你需要将错误响应代码转换成 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
)

推荐阅读