Blockhound 没有检测到直接的阻塞代码
Blockhound is not detecting straightforward blocking code
使用 spring 启动 webflux,我正在尝试使用 Blockhound 进行非常简单的阻塞调用,但它似乎没有检测到它。
<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 相关的错误。
所以我想我的安装很好
这里没有错,你只是遇到了一个极端情况。
Mono.just()
是一种相当 特殊的 类型的 Mono
在很多方面(这就是为什么我对它在这么多简单的应用中的使用感到绝望的原因)入门”风格的例子,但我离题了) - 因为你实际上只是将一个值包装在一个虚拟发布者中,它 从不 需要阻止才能 return 它的值,即使你调用块方法。方法名称可能暗示您正在阻止,但是 you can trivially verify from the source code that it just returns a value。因此没有阻塞操作发生,所以 Blockhound 没有什么可抱怨的。
如果您要在组合中添加另一个运算符,即使它没有实际效果:
String a = Mono.just("block").cache().block();
...然后你会看到 Blockhound 开始抱怨,因为你不再直接使用 MonoJust
.
的特殊情况
Blockhound 正在做它应该做的事情,问题是你(非常可以理解)期望 阻止一些东西,但没有。
使用 spring 启动 webflux,我正在尝试使用 Blockhound 进行非常简单的阻塞调用,但它似乎没有检测到它。
<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 相关的错误。 所以我想我的安装很好
这里没有错,你只是遇到了一个极端情况。
Mono.just()
是一种相当 特殊的 类型的 Mono
在很多方面(这就是为什么我对它在这么多简单的应用中的使用感到绝望的原因)入门”风格的例子,但我离题了) - 因为你实际上只是将一个值包装在一个虚拟发布者中,它 从不 需要阻止才能 return 它的值,即使你调用块方法。方法名称可能暗示您正在阻止,但是 you can trivially verify from the source code that it just returns a value。因此没有阻塞操作发生,所以 Blockhound 没有什么可抱怨的。
如果您要在组合中添加另一个运算符,即使它没有实际效果:
String a = Mono.just("block").cache().block();
...然后你会看到 Blockhound 开始抱怨,因为你不再直接使用 MonoJust
.
Blockhound 正在做它应该做的事情,问题是你(非常可以理解)期望 阻止一些东西,但没有。