Spring reactive Mono:blockOptional conflict with spring actuator

1.1k Views Asked by At

I'm mapping json array response to reactor world but have an issue like:

    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())!!

This snipcode doesn't work if I add this property of spring actuator

management.endpoints.enabled-by-default=true

Netty server cannot start without any exceptions.

But It works when I change to

management.endpoints.enabled-by-default=false

The Netty started well

Any ideas this issue please?

** Updated **

When I add some timeout value .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()

I pretty sure conflict somewhere between Mono and Spring actuator 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)

Note configurationClient.getData() this just a GET request return 200-[{...}]

  • Everything work if I use management.endpoints.enabled-by-default=false
1

There are 1 best solutions below

0
On

problem is solved.

Root cause:

It's not a bug of Mono:blockOptional or Spring actuator individually.

This configuration management.endpoints.enabled-by-default=true is conflict with existing actuator endpoint configurations

Solution:

Cleanup spring actuator configuration properties to avoid this conflict then Mono:blockOptional work well