quarkus @ObservesAsync 调用 Uni

问题描述 投票:0回答:1

在异步观察者中调用 Uni 的最佳方式是什么?如果我能返回大学那就太好了,但不幸的是这是行不通的。

void observe(@ObservesAsync MyEvent event) {
    Uni<Object> task;
}
java quarkus vert.x mutiny
1个回答
1
投票

正如@ladicek 提到的,你可以:

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

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

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

2)同步观察者并使用“即发即忘”方法触发异步操作

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));
}

3)异步观察者并产生一个
CompletionStage

CompletionStage<Void> observe(@ObservesAsync MyEvent event) {
    Uni<Void> uni = ...;
    return uni.subscribeAsCompletionStage();
}
© www.soinside.com 2019 - 2024. All rights reserved.