Micronaut 事件循环与 @ExecuteOn(TaskExecutors.BLOCKING)

问题描述 投票:0回答:1

所以 Micronaut 文档 告诉我们 Micronaut 使用事件循环:

Micronaut 框架基于 Netty 构建,Netty 围绕事件循环模型和非阻塞 I/O 进行设计。 Micronaut 在与请求线程(事件循环线程)相同的线程中执行 @Controller beans 中定义的代码。

并且进一步说

要使用

blocking
执行器,只需标记例如:带有
ExecuteOn

的控制器

我正在寻找给定注释可能不起作用的原因。我都试过了

@ExecuteOn(TaskExecutors.BLOCKING)

@ExecuteOn(TaskExecutors.IO)

但使用的线程仍然是

default-nioEventLoopGroup-2-3
等之一

我有一个阻塞操作要执行,但失败并出现错误

io.micronaut.http.client.exceptions.HttpClientException:您正在尝试在 netty 事件循环线程上运行 BlockingHttpClient 操作。这是错误的常见原因:事件循环永远不应该被阻塞。您可以将控制器标记为 @ExecuteOn(TaskExecutors.BLOCKING),或使用反应式 HTTP 客户端来解决此错误。如果您确定这里的阻塞操作没问题,还有一个配置选项可以禁用此检查。

或者,如果有人知道最后提到的“配置选项”在哪里/什么是禁用检查,那也会很有用。

configuration annotations micronaut blocking micronaut-rest
1个回答
0
投票

我也遇到了。原来是因为我使用了暂停功能,例如

    @ExecuteOn(TaskExecutors.BLOCKING)
    suspend fun greet(): String
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.