quarkus @ObservesAsync 调用 Uni
quarkus @ObservesAsync invoke Uni
在异步观察器中调用 Uni 的最佳方式是什么?如果我可以 return Uni 就好了,但不幸的是那行不通。
void observe(@ObservesAsync MyEvent event) {
Uni<Object> task;
}
如@ladicek 所述,您可以:
- 使用同步观察器并阻塞直到终止
- 使用同步观察器并使用 fire-and-forget 方法“触发”异步操作
- 使用异步观察器(虽然它不是严格意义上的异步,它只是在另一个线程上运行)并生成一个
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();
}
在异步观察器中调用 Uni 的最佳方式是什么?如果我可以 return Uni 就好了,但不幸的是那行不通。
void observe(@ObservesAsync MyEvent event) {
Uni<Object> task;
}
如@ladicek 所述,您可以:
- 使用同步观察器并阻塞直到终止
- 使用同步观察器并使用 fire-and-forget 方法“触发”异步操作
- 使用异步观察器(虽然它不是严格意义上的异步,它只是在另一个线程上运行)并生成一个
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();
}