了解 Micronaut 2

Understanding Micronaut 2

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

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

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

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

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

注意保存方法的 return 类型是 Single,它是非阻塞反应类型。

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

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

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

你应该使用非阻塞类型;在我链接的部分末尾,有一个与 @Client.

兼容的响应类型列表