【问题标题】:Spring reactive Mono:blockOptional conflict with spring actuatorSpring reactive Mono:blockOptional 与 spring actuator 冲突
【发布时间】: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())!!

如果我添加弹簧执行器的此属性,此代码将不起作用

ma​​nagement.endpoints.enabled-by-default=true

没有任何异常,Netty 服务器无法启动。

但是当我更改为时它可以工作

ma​​nagement.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 执行器之间存在冲突ma​​nagement.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-[{...}]

  • 如果我使用,一切正常 ma​​nagement.endpoints.enabled-by-default=false

【问题讨论】:

  • 什么是配置客户端?你得到什么异常?
  • configurationClient.getData() // 返回 json 对象 这将返回一个 json 对象数组

标签: spring-boot reactive-programming spring-webflux spring-actuator


【解决方案1】:

问题解决了。

根本原因:

这不是 Mono:blockOptional 或 Spring actuator 单独的错误。

此配置 ma​​nagement.endpoints.enabled-by-default=true 与现有执行器端点配置冲突

解决方案:

清理弹簧执行器配置属性以避免这种冲突,然后 Mono:blockOptional 工作得很好

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 2021-11-15
    • 2017-03-23
    • 2016-12-08
    • 2015-11-28
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多