问题标签 [mutiny]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
437 浏览

java - Quarkus:如何将方法从命令式更改为反应式

我构建了一个小的 Rest API 来了解更多关于 Quarkus 框架的信息。现在我想开始使用带有反应式 API 的框架,但我很难理解一些概念。目前,该项目正在使用 RESTEasy Reactive with Jackson,Hibernate Reactive with Panache 和 Postgresql Reactive Client。

这是我的课

现在,在我的服务中(势在必行),我执行以下操作:

角色类

角色服务类

这显然会在数据库中注册 UserRole 枚举中的所有角色,并且它工作正常。我想要实现的是复制这种方法,但使用反应形式。这些是我在代码中所做的更改

角色类

角色服务类

当我运行应用程序时,它没有给出任何错误,日志显示发生了一些事情,数据库创建了表,但是它没有插入任何东西。我以不同的方式尝试过它,但是,我没有成功地让它像我希望的那样工作。

0 投票
0 回答
606 浏览

transactions - 无法从 IO 线程启动 JTA 事务

我正在尝试在 quarkus 2.2 上测试一些用 mutiny 实现的反应性代码。这段代码做一些 sql 查询,我想要一个事务方法。

据我所知,为了测试响应式代码,我必须明确地等待结果。但是当有事务时,我得到一个 io.quarkus.runtime.BlockingOperationNotAllowedException: Cannot start a JTA transaction from the IO thread。

这里是测试:

使用此代码,异常将在最后一行抛出。

如果我用 listUniAssertSubscriber.assertCompleted(); 替换最后一行,测试将失败并显示“预期完成事件,但未收到它”。

有人知道是否有办法用事务测试反应性代码?

0 投票
1 回答
250 浏览

quarkus - 如何在另一个线程上运行阻塞代码并使http请求立即返回

Quarkus我们用and开始了一个新项目,并Mutiny用 Quarkus 创建了一堆端点,到目前为止@Funq一切正常。现在我们想在其中一个端点处理一些非常耗时的事情,我们期望的是,一旦用户点击一个按钮从前端发送 http 请求并点击这个特定的端点,我们将202 Accepted立即返回,留下从后端在另一个线程中进行耗时的操作处理,然后在完成后向用户发送相应的通知电子邮件。

我知道这可以用@Asyncor来完成CompletableFuture,但现在我们想用Mutiny. 根据我Mutiny在这里阅读文档的方式https://smallrye.io/smallrye-mutiny/guides/imperative-to-reactiverunSubscriptionOn将通过在另一个线程上运行耗时的方法来避免阻塞调用者线程,并且我的测试显示了时间- 消耗代码确实在不同的线程上执行。但是,http 请求确实会not立即返回,它仍然处于挂起状态,直到耗时的方法完成执行(正如我在浏览器的开发人员工具中观察到的那样)。我误解了它的runSubscriptionOn工作原理吗?如何使用 实现此功能Mutiny

我的@Funq端点看起来像这样

编辑:我Uni根据@Ladicek 的回答找到了解决方案。在深入研究 Quarkus 和 Uni 之后,我有一个后续问题:

目前我们的大多数阻塞方法都是not在级别上返回 Uni Service,而不是我们从它们返回的内容(即对象或列表)中创建 Uni 对象,并Controller在其端点中返回 Uni 级别,如下所示

return Uni.createFrom().item(() -> myService.myIOBlockingMethod(request)).

正如@Ladicek 解释的那样,我不必.runSubscriptionOn显式使用,因为 IO 阻塞方法将自动在工作线程上运行(因为我在服务级别的方法确实not返回 Uni)。这有什么缺点吗?我的理解是,这将导致更长的响应时间,因为它必须在 I/O 线程和工作线程之间跳转,对吗?

对此的最佳做法是什么?我是否应该始终Uni在级别返回这些阻塞方法,Service以便它们也可以在 I/O 线程上运行?如果是这样,我想我总是需要调用.runSubscriptionOn以在不同的工作线程上运行它,这样 I/O 线程就不会被阻塞,对吗?

0 投票
1 回答
342 浏览

quarkus - Mutiny Uni 转换为原始类型

到目前为止,我已经在 Quarkus 中使用 smallrye Mutiny 完成了非常基本的事情。基本上,我有一两个非常小的 Web 服务,它们只与 Web 应用程序交互。这些服务返回一个Uni<Response>.

现在我正在编写一个日志服务,我希望我的其他人将信息传递给。在这个日志服务中,我需要向调用服务返回一个值。日志服务会将此值作为Uni<Integer>. 我正在努力解决的是如何将调用服务中的返回值提取为int.

这是日志服务中的功能

这是调用服务中的客户端代码

基本上我尝试过的所有东西都会创建另一个Uni. 也许我只是在使用这个概念都错了。但是我怎样才能摆脱Integer困境,Uni这样我才能得到intValue呢?

0 投票
1 回答
379 浏览

hibernate - quarkus 反应式命名数据源 em 为空

所以,

我的 Quarkus 项目 (v2.2.2) 具有以下核心功能:

  • 带有兵变的反应式postgresql数据库
  • 用于不模拟存储库的测试的 h2 数据库

在编写测试时,我在 quarkus 启动期间遇到了一个错误(忘记了那个错误是什么),但是一些页面建议切换到命名数据源以避免这个问题。这在当时似乎奏效了,我的模拟存储库测试通过了。

快进一点,我尝试做一个使用数据库的测试。我现在收到此错误:

我的 application.yml (customers作为命名数据源):

我的测试:

我的控制器的第一步是使用这个存储库:

和我的实体:

根据我发现的@persistenceUnit实体对象应该关联适当的数据源。但是, Mutiny$Session 似乎为空。我错过了什么吗?


更新 1

在 Quarkus v 2.3.0 CR1 上

完整的依赖树在这里:https ://www.codepile.net/pile/8jQeJ3j2

场景一:默认数据源(没有 PersistenceUnit 注解并且 application.yaml 没有数据源的名字)

在运行测试我得到这个错误:

场景 2:如果我将其设置为使用命名数据源,我会得到:

0 投票
1 回答
66 浏览

quarkus - Quarkus RESTEasy 反应式在 2.2 版之前如何工作?

我们目前使用的是旧版本的 Quarkus,所以我想了解影响并考虑是否应该升级到最新版本。

我了解到,自 2.2 版以来,Quarkus 将根据方法返回类型(https://quarkus.io/blog/resteasy-reactive-smart-dispatch/#new-world-new-rulesI/O thread )运行方法,这意味着阻塞/ //同步方法不返回,会自动卸载到工作线程,不会阻塞I/O线程。Worker threadUniMultiCompletionStage

在我们当前使用旧版 Quarkus 和 RESTEasy Reactive(我认为是 1.12.2)的实现中,对于所有not返回的方法Uni//我相信它们将在 I/O 线程上被调用,因为我们没有在它们上使用Multi它们。这些方法包括调用外部 API、访问数据库和访问文件等操作,所以我认为我们应该有责任通过使用响应式库以非阻塞/异步方式执行这些操作,否则它们会阻塞 I/ O 线程(鉴于并非我提到的所有这些方法当前都是使用响应式库实现的)。但是升级到最新版本将解决这个问题,因为这些方法将被卸载到工作线程,我正确吗?CompletionStage@Blocking

PS:通过阅读 Quarkus 文档,我了解到最少的 I/O 线程可以处理许多并发请求。我很好奇默认情况下有多少个 I/O 线程,这是可配置的吗?谢谢!

0 投票
2 回答
135 浏览

apache-kafka - Mutiny - Kafka 写入顺序发生

我是 Quarkus 的新手。我正在尝试使用接收输入的 quarkus reactive 编写 REST 端点,进行一些验证,将输入转换为列表,然后将消息写入 kafka。我的理解是将所有内容都转换为 Uni/Multi,这将导致在 I/O 线程上以异步方式执行。在 intelliJ 日志中,我可以看到代码在执行程序线程中以顺序方式执行。kafka 写入顺序发生在其自己的网络线程中,这增加了延迟。

我已经做了几天了。不确定是否做错了什么。任何帮助,将不胜感激。谢谢

0 投票
0 回答
100 浏览

mutiny - Mutiny - 结合 Unis 列表

我有两个 Uni 列表如下 -

现在,我想将这些列表组合成一个 Unis 列表

我正在尝试使用Uni#combine.

然后结合uniList1anduniList2但无法为 combineWith 提供正确的 lambda。

0 投票
0 回答
64 浏览

hibernate - 如何使惰性关系保持在休眠状态下反应

我正在使用带有休眠反应的 Quarkus,一旦我添加了 @OneToMany 注释,我就无法使我的实体持续存在。我向您展示我的所有代码:

实体一:树:

实体二:水果:

树库:

create 方法不会在数据库中保留任何树,因此所有对 session.find(...) 的调用都返回 null。在将 Tree 关系添加到水果之前,使用此方法在水果存储库中一切正常

任何建议表示赞赏。

0 投票
1 回答
86 浏览

apache-kafka - Quarkus 中的 Kafka 背压

我正在开发一个项目,该项目需要从 GCP Pub/Sub 接收事件、下载文件、解析和处理文件,最后将结果发布到 Kafka 代理,但我收到SRMSG00034: Insufficient downstream requests to emit item

在我第一次尝试发布到 Kafka 时,我使用流迭代 msgList,但我读到 Mutiny(https://quarkus.io/blog/mutiny-back-pressure/)可以控制背压,但我得到了同样的错误.

在我的场景中,我必须发布两个不同的列表,其中一个有大约 10k 条消息。我读到我可以使用@OnOverflow控制溢出配置,但我更喜欢保持默认配置,除非有必要进行一些更改。

你能为我指出正确的方向来解决这个问题吗?

提前致谢