了解 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
.
兼容的响应类型列表
寻求帮助以了解 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
.