You need to enable JavaScript to run this app. Spring Boot WebFlux环境下Blockhound无法检测简单阻塞代码问题
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot WebFlux环境下Blockhound无法检测简单阻塞代码问题

Blockhound 无法检测到 Mono.block() 调用的原因

你已经通过UUID.randomUUID()的检测验证了Blockhound配置生效,说明当前控制器方法的执行线程确实属于Blockhound监控的非阻塞线程范围,无需调整配置,检测失败的核心原因如下:

  • 你的测试代码中调用block()的目标是Mono.just("block"),这是一个已经处于完成状态的响应式流,block()方法执行时不需要等待任何异步操作完成,直接返回已有的结果值,全程不会调用LockSupport.park()、IO阻塞等被Blockhound标记为阻塞的底层方法,因此不会触发检测规则。
    Blockhound的检测逻辑是拦截实际发生的阻塞方法调用,而非识别block()方法本身的存在。

验证方案

将测试代码替换为需要实际等待的Publisher,即可触发Blockhound的阻塞检测:

import java.time.Duration;

@GetMapping("/block")
public Mono<String> block() {
    // delay生成的Publisher需要1秒后才会完成,block()会实际进入阻塞等待逻辑
    String a = Mono.delay(Duration.ofSeconds(1))
            .map(i -> "block")
            .block();
    return Mono.just(a);
}

修改后调用该接口,Blockhound会正常抛出阻塞调用的异常,符合预期。

内容的提问来源于stack exchange,提问作者Monta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 20:27:01