通过回调方法使用 Quarkus/Mutiny 将 MyRequestService 连接到 Reactive REST GET 端点

Connect MyRequestService to Reactive REST GET endpoint with Quarkus/Mutiny through callback method

上周我与Mutiny library because i needed a Reactive REST endpoint in my Quarkus project. This was not as obvious as it sounds so i thought i'll share my new insights about the Mutiny library in Quarkus;

进行了第一轮✨

Quarkus documentation 将 Mutiny 库指定为 Reactive 用例的首选库;

例如;

值得注意的是,大多数 Mutiny 示例都使用新的 String 作为示例。 所以,我的问题仍然存在;

how do i connect MyRequestService with Mutiny in Quarkus

这将是:

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

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

Mutiny uses an Emitter when integrating with callback-based APIs;

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

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

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

MyRequestService 创建一个 MyJsonResultConsumer 并将其传递给 Mutiny Emitter。生成的 Uni returned 到 ServiceResource。

最后,MyJsonResultConsumer 才是真正的回调对象;方法 ready() 在 UniEmitter 上调用 complete() 结束对 Mutiny 的回调。

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