当前位置: 首页 > 知识库问答 >
问题:

了解Micronaut2

田意致
2023-03-14

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

我有一个场景,需要调用多个微服务--因此涉及多个IO调用。我通过定义接口等为它使用声明性客户端,文档说,所有HttpClient调用都是在NIO EventLoop上完成的。但是当这些Http调用阻塞时,直到它们得到响应,我有点困惑--我需要将它们卸载到一个单独的IO池吗?HttpClient使用的NIO Eventloop线程在执行并得到http响应之前不会阻塞吗?我一直在使用客户端接口的常用返回类型。然后我需要从它们返回一个RxJava类型吗?可能是我想多了--但当我们必须从控制器方法调用其他微服务时,我确实很困惑什么是正确的模式?有什么帮助-谢谢。

共有1个答案

山森
2023-03-14

文档提供了一个声明式http客户端的示例。

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

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

请注意save方法的返回类型是single,它是非阻塞的反应类型。

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

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

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

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

 类似资料:
  • 问题内容: 我不太清楚该在哪里抛出该异常。 例如,我正在实现接口,并且不希望任何人调用该方法: Future#get(long,TimeUnit)。 所以,我可以扔吗? 事情是方法的规范并没有说明抛出异常。反过来,例外 抛出以指示不支持请求的操作。 类UnsupportedOperationException 我的意思是,如果您不希望调用它,通常会抛出它,否则可能会因为不是所有方法都已实现而被认为

  • 问题内容: 我试图了解Go中的并发性。特别是,我编写了以下线程不安全程序: 我认识到我应该使用渠道来防止与发生竞争,但这不是重点。程序打印,然后似乎永远循环(不再打印任何内容)。我希望它能打印出无限的数字列表,可能由于竞态条件而跳过某些数字并重复其他数字(或更糟的是,在更新数字时打印数字)。 我的问题是:为什么程序只打印一行? 只是要清楚一点:对于这个玩具示例,我不是故意使用渠道。 问题答案: 关

  • 问题内容: 我了解这是一个框架;甚至还有一个开源的跨平台游戏开发库。我转到libgdx主页,并按照视频教程中的说明进行操作。正确设置项目后,我可以在多个受支持的平台上运行默认的my- gdx-game项目。太好了,花花公子…现在呢? 我一直在搜索论坛,Wiki,javadocs和许多其他站点,以寻找体面的简单操作方法。不幸的是,我找不到任何东西,那里的大多数帮助都假设您对这个库有一些基本的了解。

  • 问题内容: JNDI就像是类固醇的地图,对吗?我使用键来查找对对象的引用。另外,什么是InitialContext?我似乎不知道这个主意。 问题答案: 从概念上讲,JNDI就像类固醇。 允许您从命令行将参数传递给代码。同样,JNDI允许您在代码外部(例如,在应用程序服务器配置文件中)配置任意对象,然后在代码中使用它们。 换句话说,它是Service Locator模式 的实现:您的代码从中心注册表

  • 问题内容: 我正在尝试使用触发两个请求,然后在两个请求完成后调用一些函数。这是我的代码: 但是,这没有按预期方式工作。Ajax调用将返回要在其中使用的数据,而Ajax调用将返回要分配给var count并随后在中使用的count 。 但是,当我启动上面的代码时,先被调用,然后再将数据保留为as 。我如何才能做到这一点,据我所知,只有当两个返回的函数都执行时,才能进行。我希望两个ajax调用都应该并

  • 问题内容: 我遇到了“ 高级Linux编程”中的 一个概念。这里是一个链接:请参阅 4.5 GNU / Linux线程实现 。 我对作者所说的概念很清楚,但是我对他解释的为线程打印processID的程序感到困惑。 这是代码 根据作者,上述代码的输出为 我编译时得到的输出是 我知道,创建线程时,Linux内部调用 clone (大多数情况下),就像 fork 系统调用创建进程一样。唯一的区别是在进