2017-07-29 1056 views
0

我試圖讓我的周圍反應式編程的頭,所以我想問一下,如果有任何好處在這裏使用助焊劑:它依賴於使用Flux而不是for循環,有什麼好處?

override fun notifyObserversOnMessage(message: Message) { 
     for (observer in observers) { 
      observer.reactOnMessage(message) 
     }  
    } 

:中

override fun notifyObserversOnMessage(message: Message) { 
     Flux.fromStream(observers.stream()) 
       .map { observer -> Mono.just(observer.reactOnMessage(message)) } 
       .subscribe()   
    } 

代替每個觀察員都在做什麼,如果那是IO還是不?

回答

1

這取決於。

如果它是合理的處理順序observers,沒有好處在這裏使用流量和

override fun notifyObserversOnMessage(message: Message) { 
    observers.forEach { observer -> 
     observer.reactOnMessage(message) 
    } 
} 

或者乾脆

override fun notifyObserversOnMessage(message: Message) { 
    observers.forEach { it.reactOnMessage(message) } 
} 

是罰款。

幼稚並行,

override fun notifyObserversOnMessage(message: Message) { 
    observers.parallelStream().forEach { it.reactOnMessage(message) } 
} 

可以使用,但在這一點上它更可能你就會有更多的要求,如工人池或超時。在這種情況下,反應堆的表現力很有用。

+0

如果每個觀察者都將消息寫入數據庫,它是否會與Flux異步完成,或者循環將依次運行? – Orestis

+0

@Orestis正如你所寫,它是連續的。一種獲得並行性的方式就像'observers.toFlux()。flatMap {observer - > Mono.fromCallable {observer.reactOnMessage(message)} .subscribeOn(Schedulers.parallel())} .subscribe()''。 – ephemient

相關問題