用反应堆射击并忘记

用反应堆射击并忘记,第1张

反应堆射击并忘记 1,如果你的 发射后不管 已经是异步返回
Mono
/
Flux
public Flux<Data> search(SearchRequest request){    return searchService.search(request)  .collectList()  .doonNext(data -> doThisAsync(data).subscribe())  // add error logging here or inside doThisAsync  .flatMapMany(Flux::fromIterable);}public Mono<Void> doThisAsync(List<Data> data) {    //do some async/non-blocking processing here like calling WebClient}
2,如果您 的一劳永逸 确实阻止了I / O
public Flux<Data> search(SearchRequest request){    return searchService.search(request)  .collectList()  .doonNext(data -> Mono.fromRunnable(() -> doThisAsync(data))  .subscribeOn(Schedulers.elastic())  // delegate to proper thread to not block main flow  .subscribe())  // add error logging here or inside doThisAsync  .flatMapMany(Flux::fromIterable);}public void doThisAsync(List<Data> data) {    //do some blocking I/O on calling thread}

请注意,在上述两种情况下,您都会失去反压支持。如果由于

doAsyncThis
某种原因减慢了速度,那么数据生产者将不在乎并继续生产项目。这是“火与火”机制的自然结果。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5639343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存