gpt4 book ai didi

micronaut - 了解 Micronaut 2

转载 作者:行者123 更新时间:2023-12-04 09:22:29 25 4
gpt4 key购买 nike

寻求帮助以了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com