首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Blockhound没有检测到直接的阻塞代码。

Blockhound没有检测到直接的阻塞代码。
EN

Stack Overflow用户
提问于 2021-07-10 14:15:54
回答 1查看 472关注 0票数 1

使用spring引导网络流量,我尝试了一个非常简单的阻塞调用,但它似乎没有发现它。

代码语言:javascript
复制
        <dependency>
            <groupId>io.projectreactor.tools</groupId>
            <artifactId>blockhound</artifactId>
            <version>1.0.6.RELEASE</version>
        </dependency>

主要方法:

代码语言:javascript
复制
public static void main(String[] args) {
    BlockHound.install();
    SpringApplication.run(MyApplication.class, args);
  }

我的阻塞端点:

代码语言:javascript
复制
    @GetMapping("/block")
    public Mono<String> block() {
        String a = Mono.just("block").block();
        return Mono.just(a);
    }

有什么想法吗?

编辑:

当我在端点中使用UUID.randomUUID()时,会得到与randomUUID()使用的阻塞FileInputStream#readBytes相关的错误。所以我想我的安装很好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-10 21:13:01

这里没什么不对的,你只是碰到了一个小案子。

Mono.just()在很多方面都是相当特殊的Mono (这就是为什么我对它在许多简单的“入门”样式示例中的使用感到失望,但我偏离了)--因为您实际上只是在虚拟发行者中包装一个值,所以它从来不需要阻塞来返回它的值,即使您调用了块方法。方法名可能意味着您正在阻塞,但是您可以从源代码中验证它只返回一个值。。因此,没有阻塞操作发生,所以没有什么可抱怨的。

如果要在混合中添加另一个操作符,即使它没有真实的效果:

String a = Mono.just("block").cache().block();

...then你会看到发条狗开始抱怨,因为你不再直接使用特例的MonoJust

发条犬正在做它应该做的事情,问题是,你(很容易理解)期望有什么东西能阻止它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68328522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档