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

Quarkus兵变和无神论与反应性

申阳伯
2023-03-14

TL;DR:哪种模式更常见?使用Mutiny Imperative resteasy,还是只使用resteasy?

我的理解是,哗变允许我传递给Quarkus一个更长的运行动作,并让它处理代码如何在上下文中运行的细节。使用被动技能比兵变命令有同等或更多的好处吗?如果从功能的角度看,从线程处理的角度看,它是相等的或者更好,那么Reactive将是很好的,因为它需要更少的代码来维护(创建uni,等等)。然而,如果传回一个Uni明显更好,那么使用它可能是有意义的。

https://quar kus . io/guides/getting-started-reactive # important-vs-reactive-a-question-of-threads

叛乱命令:

@GET
    @Path("/getState")
    @Produces(MediaType.APPLICATION_JSON)
    public Uni<State> getState() throws InterruptedException {
        return this.serialService.getStateUni();
    }

反应性:

@GET
    @Path("/getState")
    @Produces(MediaType.APPLICATION_JSON)
    public State getState() throws InterruptedException {
        return this.serialService.getState();
    }

共有1个答案

万俟招
2023-03-14

与往常一样,这要视情况而定。首先,我建议您阅读 https://quarkus.io/blog/resteasy-reactive-smart-dispatch/,其中解释了这两种方法之间的区别。

它不是关于更长的动作(异步!=更长);是关于调度策略的。

当使用RESTEasy-Reactive时,它使用I/O线程(事件循环)来处理请求,并且仅当endpoint的签名需要时才切换到工作线程。使用I/O线程可以实现更好的并发性(因为您不使用工作线程),减少内存使用(因为您无需创建工作线程)以及降低响应时间(因为您节省了一些上下文切换)。

Quarkus检测您的方法是否可以在I/O线程上调用。启发式方法基于方法的签名(包括注释)。要重用问题中的示例:

  • 返回 State 的方法被视为阻塞,因此将在工作线程上调用
  • 返回 Uni 的方法

所以,问题是,你应该使用哪种调度策略?这实际上取决于你的应用程序和上下文。如果你不期望有很多并发请求(很难给出一个通用的阈值,但通常在200到500 req/sec之间),使用阻塞/命令式方法是完全可以的。如果你的应用程序充当一个具有潜在请求高峰的API网关,非阻塞会提供更好的结果。

请记住,即使您选择命令式/阻塞式方法,RESTEasy反应式方法也提供了许多好处。由于大多数繁重的请求/响应处理都是在 I/O 线程上完成的,因此您可以更快地使用更少的内存来...自由。

 类似资料:
  • 背景:本周我刚刚开始学习Quarkus,尽管我以前使用过一些流媒体平台(特别是scala中的http4s/fs2)。 工作与夸克斯反应性(与兵变)和任何反应性数据库客户端(兵变反应性postgres,反应性elasticsearch,等)我有点困惑如何正确管理阻塞调用和线程池。 quarkus文档建议使用注释命令式代码或cpu密集型代码,以确保将其转移到工作池以不阻塞IO池。这是有道理的。 考虑以

  • 当我到达endpoint时,我会得到这个资源: 这是我的代码: 这些是我的quarkus项目依赖项: 有什么想法吗?

  • 我试图在同一个事务中执行3个插入,但当其中一个插入失败时,我无法回滚事务。 我是反应式世界的新手,这是我的第一个反应式应用。 下面是数据库模型的简化: 我想在同一事务中执行以下插入: 但是,当第二次插入失败时,第一次插入不会回滚。 我有以下课程: :接收来自Kafka的消息,并通过服务触发插入 :使用3个DAO运行3个插入 :运行实体A的插入 :运行实体B的插入 :运行实体C的插入 和类似于。 我

  • 我正在尝试用quarkus、hibernate和postgres开发一个多租户应用程序。 Hibernate Responsive通过让implement支持多租户: http://hibernate.org/reactive/documentation/1.0/reference/html_single/#_custom_connection_management_and_multitenanc

  • 这是我的代码: 我收到两条编译信息: 我不太清楚,因为返回一个。。。 有什么想法吗?

  • Quarkus的(某种程度上)新的反应式API非常棒,但它在编写代码时引入了一些复杂性(在我看来,很像JavaScript中的异步代码)。它是如何与metrics/tracing/jwt API集成的?或者任何通过线程上下文传递的内容? Thnx