Spring boot 在Project reactor中重复请求的最佳方式
我对反应式编程相当陌生 我们在SpringBoot中使用projectreactor开发了一个应用程序。在这里面,我们向第三方服务发出一个HTTP请求,结果得到一个MonoSpring boot 在Project reactor中重复请求的最佳方式,spring-boot,kotlin,project-reactor,Spring Boot,Kotlin,Project Reactor,我对反应式编程相当陌生 我们在SpringBoot中使用projectreactor开发了一个应用程序。在这里面,我们向第三方服务发出一个HTTP请求,结果得到一个Mono fun getResultFromService() : Mono<Result> { //requesting the third party REST API } fun getResultFromService():Mono{ //请求第三方RESTAPI } 我想: 检查响应代码 对于某些值,重
fun getResultFromService() : Mono<Result> {
//requesting the third party REST API
}
fun getResultFromService():Mono{
//请求第三方RESTAPI
}
我想:
- 最好的方法是什么
- 我应该使用什么来代替
Thread.sleep()
- 我检查了
,我不认为它只适合M次尝试repeatWheempty
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
)
fun main()
{
getResultFromService()
.平面图{
如果(it.statusCode==500)
错误(RuntimeException(“应该重试的错误”))
否则,就(它)
}.retryBackoff(3,持续时间为百万(500),持续时间为百万(500))
.block()
}
fun getResultFromService():Mono
{
//请求第三方RESTAPI
TODO(“实现它”)
}
数据类结果(
val状态代码:Int,
val回复:有吗
)
您在这里描述的内容听起来有点像发生错误时的基本指数退避操作。你考虑过使用内置方法吗?@MichaelBerry是的,我也找到了。我不确定如何使用iThanks检查响应的状态代码。我也明白我需要先抛出一个异常,然后再捕获它。