micronaut - 了解 Micronaut 2

标签 micronaut

寻求帮助以了解 Micronaut 2 的正确模式。 默认情况下,所有 Controller 方法现在都在 NIO Eventloop 线程上运行。文档警告不要在此线程上执行任何阻塞调用,而是将其卸载到线程池(使用 @ExecuteOn 或 RxJava SubscribeOn)作为阻塞调用的示例,文档讨论了 DB 调用或 JPA 调用。

我有一个场景,我需要调用多个微服务 - 因此涉及多个 IO 调用。我通过定义接口(interface)等来使用声明式客户端。文档说,所有 HttpClient 调用都是在 NIO 事件循环上完成的。但由于这些 Http 调用是阻塞的,直到它们得到响应,我有点困惑 - 我是否需要将它们卸载到单独的 IO 池? HttpClient 使用的 NIO Eventloop 线程不会阻塞直到它执行并获得 http 响应吗?我一直在客户端界面使用常用的返回类型。然后我需要从它们返回 RxJava 类型吗?可能是我想得太多了 - 但当我们必须从 Controller 方法调用其他微服务时,我肯定对正确的模式是什么感到困惑? 任何帮助 - 感激不尽。

最佳答案

The documentation提供了声明式 http 客户端的示例。

@Client("/pets") 
public interface PetClient extends PetOperations { 

    @Override
    Single<Pet> save(String name, int age); 
}

注意 save 方法的返回类型是 Single,它是一个非阻塞 react 类型。

如果您在客户端中声明具有阻塞类型的方法,则调用将被阻塞,这不是您想要的:

@Client("/pets") 
public interface PetClient extends PetOperations { 

    @Override
    Pet save(String name, int age); //blocking call
}

你应该使用非阻塞类型;在我链接的部分的末尾,有一个与 @Client 兼容的响应类型列表。

关于micronaut - 了解 Micronaut 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63075919/

相关文章:

kotlin - 如何在 micronaut 上启用 swagger UI?

java - 用于多个配置文件的 Micronaut PropertySource

实体中的 Micronaut 数据和枚举字段

gradle - 当我的应用程序依赖于依赖于不同micronaut版本的lib时,找不到匹配的micronaut-bom变体

http - Micronaut http 客户端交换与检索

java - 延迟获取相关实体的 Micronaut 数据问题

java - 如何获取过滤器中的请求路径变量? [微型机器人1.3.2]

java - 如何在 micronaut-data 中注入(inject)多个数据源的 JPA 存储库?

使用布局方言时 Thymeleaf 和 Micronaut View 错误

swagger - 将 Micronaut OpenAPI/Swagger 生成器与 grails 4 结合使用