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

2024-03-08

上周我与Mutiny https://smallrye.io/smallrye-mutiny/图书馆,因为我需要一个Reactive https://en.wikipedia.org/wiki/Reactive_programming我的 REST 端点Quarkus https://quarkus.io/项目。这并不像听起来那么明显,所以我想我会分享我对这个问题的新见解Mutiny https://smallrye.io/smallrye-mutiny/图书馆在Quarkus https://quarkus.io/;

Quarkus 文档 https://www.oreilly.com/library/view/quarkus-cookbook/9781492062646/指定 Mutiny 库作为反应式用例的首选库;

例如;

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

如何将 MyRequestService 与 Quarkus 中的 Mutiny 连接

这将是这样的:

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

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


Mutiny https://smallrye.io/smallrye-mutiny/使用一个Emitter https://quarkus.io/blog/reactive-messaging-emitter/与集成时基于回调的 API https://www.geeksforgeeks.org/asynchronous-synchronous-callbacks-java/;

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

因此 MyRequestService 或底层回调对象需要实现一个尤尼发射器 https://smallrye.io/smallrye-reactive-messaging/smallrye-reactive-messaging/2.5/emitter/emitter.html消费者。 但首先,要成为Reactive https://en.wikipedia.org/wiki/Reactive_programming,我的旧阻塞 REST 端点需要返回 Uni 而不是 MyJsonResult;

ServiceResource 只是将调用转发给 Service。

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

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

请记住,Mutiny 需要向 UniEmitter 提供对 accept() 的调用(返回),因此您应该检查空指针(或使用信号 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html奥伊德)。 ????????‍♂️

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐