我正在将 json 数组响应映射到反应堆世界,但遇到如下问题:
val responses = configurationClient.getData() // return json array object
.flatMap { it.bodyToMono(object : ParameterizedTypeReference<GeneralResponse<Array<ObjectResponse>>>() {})
}
.map { it.data }
.blockOptional() // exception this line
.orElse(emptyArray())!!
如果我添加弹簧执行器的此属性,此代码将不起作用
management.endpoints.enabled-by-default=true
没有任何异常,Netty 服务器无法启动。
但是当我更改为
management.endpoints.enabled-by-default=false
Netty 开局不错
请问这个问题有什么想法吗?
** 更新 **
当我添加一些超时值时.blockOptional(Duration.ofSeconds(60)) //60 seconds
val responses = configurationClient.getData() // return json array object
.flatMap { it.bodyToMono(object : ParameterizedTypeReference<GeneralResponse<Array<ObjectResponse>>>() {})
}
.map { it.data }
.blockOptional(Duration.ofSeconds(60))
.get()
我很确定 Mono 和 Spring 执行器management.endpoints.enabled-by-default=true之间存在冲突
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790)
... 20 common frames omitted
Caused by: java.lang.IllegalStateException: Timeout on blocking read for 60000 MILLISECONDS
at reactor.core.publisher.BlockingOptionalMonoSubscriber.blockingGet(BlockingOptionalMonoSubscriber.java:162)
at reactor.core.publisher.Mono.blockOptional(Mono.java:1755)
注意
configurationClient.getData()
这只是一个 GET 请求返回 200-[{...}]
- 如果我使用 management.endpoints.enabled-by-default=false一切正常