使用 Quarkus/Mutiny 在 Reactive REST GET 端点中调度阻塞服务

Dispatch a blocking service in a Reactive REST GET endpoint with Quarkus/Mutiny

最近我用 Quarkus/Mutiny 使用回调结构实现了 Reactive REST GET 端点;

完成后,我想知道这是如何通过调用阻塞服务来解决的;

How do i call a blocking service from my Reactive REST GET endpoint with Quarkus/Mutiny

我没有在文档中看到快速答案,但事实证明它很简单;

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

MyRequestService 创建一个 MyJsonResultSupplier 并使用方法 item() 将其传递给 Mutiny Uni。生成的 Uni 返回给 ServiceResource。

Mutiny 在 Supplier 上使用方法 get() 获取 MyJsonResult。调用阻塞并获取信号量 mMyJsonResultSupplierSemaphore。接下来,另一个工作线程调用方法 ready() 设置 mMyJsonResult 并释放信号量 mMyJsonResultSupplierSemaphore 解除阻塞方法 get() 到 Mutiny。

Mutiny 完全隐藏了故事的反应部分,因此您可以只阻止已注册供应商内的方法调用。