我有一個Flux流。對于處理的每個元素,我希望觸發一個異步/非阻塞操作。例如,Mono從資料庫更新回傳 a 的方法。我希望在doOnNext塊上完成此操作。我不想影響在Flux那里實作的、處理和背壓。
假設Mono要呼叫的方法是
Mono<Integer> dbUpdate();
我的Flux應該是這樣嗎?
public Flux<Data> processData(PollRequest request)
{
return searchService.search(request)
.doOnNext(data -> dbUpdate(data));
}
或者應該像堆疊溢位示例中提到的那樣。
public Flux<Data> processData(PollRequest request)
{
return searchService.search(request)
.doOnNext(data -> dbUpdate(data).subscribe());
}
以上不會導致內部阻塞問題doOnNext嗎?
此外,哪種調度程式最適合用于此類操作?
uj5u.com熱心網友回復:
dbUpdate()如果您不訂閱它,它將被忽略。以下代碼段不會列印任何內容,因為Mono.just("db update")沒有被訂閱。
Mono<String> dbUpdate() {
return Mono.just("db update")
.doOnNext(System.out::println);
}
public Flux<String> processData() {
return Flux.just("item 1", "item 2")
.doOnNext(data -> dbUpdate());
}
請注意,.subscribe()它不會阻塞您的執行緒,它會啟動作業并立即回傳。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/354183.html
標籤:爪哇 春天 反应式编程 弹簧-webflux 项目反应堆
