1

上周我在Mutiny库中进行了第一轮 ✨,因为我需要在我的Quarkus项目中使用Reactive REST 端点。这并不像听起来那么明显,所以我想我会分享我对Quarkus中Mutiny库的新见解;

Quarkus文档将 Mutiny 库指定为响应式用例的首选库;

展望未来,Mutiny 将成为 Quarkus 中所有响应式事物的首选库。

例如;

在此处输入图像描述

突出的是,大多数 Mutiny 示例都使用新字符串作为示例。所以,我的问题仍然存在;

如何在 Quarkus 中将 MyRequestService 与 Mutiny 连接起来

这将是:

Uni<MyRequestService> lMyRequestServiceUni = Uni.createFrom().item( ... ) ...

MyRequestService 已经使用了回调结构,所以我尝试了针对 Mutiny 的回调方法。

4

1 回答 1

1

Mutiny在与基于回调的 API集成时使用Emitter

您可以使用发射器创建 Uni。 这种方法在集成基于回调的 API 时很有用

https://smallrye.io/smallrye-mutiny/getting-started/creating-unis

所以MyRequestService,或者底层的回调对象,需要实现一个UniEmitter Consumer。但首先,要成为Reactive,我的旧阻塞 REST 端点需要返回 Uni<MyJsonResult> 而不是 MyJsonResult;

Uni 而不是 MyJsonResult

ServiceResource 只是将调用转发给服务。

MyRequestService 创建一个 MyJsonResultConsumer 并将其传递给 Mutiny 发射器。 生成的 lMyJsonResultUni 返回到 ServiceResource

MyRequestService 创建一个 MyJsonResultConsumer 并将其传递给 Mutiny Emitter。生成的 Uni<MyJsonResult> 返回到 ServiceResource。

最后 MyJsonResultConsumer 是实际的回调对象; 方法 ready() 调用 UniEmitter 上的 complete() 结束对 Mutiny 的回调

最后 MyJsonResultConsumer 是实际的回调对象;方法 ready() 调用 UniEmitter 上的 complete() 来结束对 Mutiny 的回调。

请记住,Mutiny 需要向 UniEmitter 提供对 accept() 的调用(返回),因此您应该检查空指针(或使用Semaphore oid)。‍♂️</p>

于 2021-03-23T10:43:50.890 回答