quarkus @ObservesAsync 调用 Uni

quarkus @ObservesAsync invoke Uni

在异步观察器中调用 Uni 的最佳方式是什么?如果我可以 return Uni 就好了,但不幸的是那行不通。

void observe(@ObservesAsync MyEvent event) {
    Uni<Object> task;
}

如@ladicek 所述,您可以:

  1. 使用同步观察器并阻塞直到终止
  2. 使用同步观察器并使用 fire-and-forget 方法“触发”异步操作
  3. 使用异步观察器(虽然它不是严格意义上的异步,它只是在另一个线程上运行)并生成一个 CompletionStage

1) 同步观察者并阻塞直到终止

void observe(@Observes MyEvent event) {
    Uni<Void> uni = ...;
    uni.await().indefinitely();

}

2) 同步观察器并使用fire-and-forget方法触发异步操作

void observe(@Observes MyEvent event) {
    Uni<Void> uni = ...;
    uni.subscribeAsCompletionStage(); // Fire and forget, no error reporting

}

或:

void observe(@Observes MyEvent event) {
    Uni<Void> uni = ...;
    uni.subscribe().with(success -> ..., failure -> log(failure));
}

异步观察者并产生一个CompletionStage

void observe(@Observes MyEvent event) {
    Uni<Void> uni = ...;
    return uni.subscribeAsCompletionStage();
}