我有一個阻塞數據存儲,它返回列表。為了反應,我應該將這個列表轉換為通量(或單聲道,取決于返回值)然后處理嗎?列表有另一個列表。我可以使用 Stream 處理臨時值或使用 Flux.fromIterable 將其轉換為 Flux 嗎?我試圖了解最佳實踐以及反應式編程在哪些方面會產生最佳性能。
1 回答
慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
Mono那么 a和 a有什么區別呢Flux?
不同之處在于 aFlux是 a List<Mono>(為簡單起見)。什么是Mono?它是 T 類型的東西。那么這對你來說意味著什么。
好吧,如果你獲取 aList<T>你可以把它放在 a 中Mono<List<T>,或者你可以把它放在 a 中Flux<T>。
如果您使用Flux#fromIterable列表中的每個項目放置此列表,那么列表中的每個項目都會變成一個Mono,并且Flux會在可用時發出該項目。
因為你有一個返回整個列表的阻塞調用,List<T>如果你把它放在 a 中,Mono訂閱者將在一個大的發射中獲得整個列表。如果它是一個非常大的列表,它可能會給 帶來壓力,subscriber因為發布者可能會在一大塊中發布一個巨大的列表,比如 1 000 000 個項目。
如果將大清單放入Flux罐頭subscriber限制中,并要求服務以更受控制的方式發出物品,例如分 10 批次,每批 100,000 件物品。
所以我個人建議將列表放在Flux.
但是這些都不會顯著提高您的應用程序的性能。subscribers它更多的是調用可以獲得的功能。
為防止您的應用程序出現嚴重減速,重要的是您的阻塞調用是使用其自己的線程進行的。Schedulers.elastic()這可以通過使用為長期任務生成新線程來實現。然后在默認 60 秒后終止該線程。
添加回答
舉報
0/150
提交
取消
