【发布时间】:2021-08-19 13:53:18
【问题描述】:
我正在将 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
【问题讨论】:
-
什么是配置客户端?你得到什么异常?
-
configurationClient.getData() // 返回 json 对象 这将返回一个 json 对象数组
标签: spring-boot reactive-programming spring-webflux spring-actuator