使用spring引导网络流量,我尝试了一个非常简单的阻塞调用,但它似乎没有发现它。
<dependency>
<groupId>io.projectreactor.tools</groupId>
<artifactId>blockhound</artifactId>
<version>1.0.6.RELEASE</version>
</dependency>主要方法:
public static void main(String[] args) {
BlockHound.install();
SpringApplication.run(MyApplication.class, args);
}我的阻塞端点:
@GetMapping("/block")
public Mono<String> block() {
String a = Mono.just("block").block();
return Mono.just(a);
}有什么想法吗?
编辑:
当我在端点中使用UUID.randomUUID()时,会得到与randomUUID()使用的阻塞FileInputStream#readBytes相关的错误。所以我想我的安装很好
发布于 2021-07-10 21:13:01
这里没什么不对的,你只是碰到了一个小案子。
Mono.just()在很多方面都是相当特殊的Mono (这就是为什么我对它在许多简单的“入门”样式示例中的使用感到失望,但我偏离了)--因为您实际上只是在虚拟发行者中包装一个值,所以它从来不需要阻塞来返回它的值,即使您调用了块方法。方法名可能意味着您正在阻塞,但是您可以从源代码中验证它只返回一个值。。因此,没有阻塞操作发生,所以没有什么可抱怨的。
如果要在混合中添加另一个操作符,即使它没有真实的效果:
String a = Mono.just("block").cache().block();
...then你会看到发条狗开始抱怨,因为你不再直接使用特例的MonoJust。
发条犬正在做它应该做的事情,问题是,你(很容易理解)期望有什么东西能阻止它。
https://stackoverflow.com/questions/68328522
复制相似问题