我试图了解反应式编程,所以我想问一下在这里使用Flux是否有任何好处:
override fun notifyObserversOnMessage(message: Message) {
Flux.fromStream(observers.stream())
.map { observer -> Mono.just(observer.reactOnMessage(message)) }
.subscribe()
}
而不是:
override fun notifyObserversOnMessage(message: Message) {
for (observer in observers) {
observer.reactOnMessage(message)
}
}
它取决于每个观察者正在做的工作,是否是IO?
答案 0 :(得分:1)
取决于。
如果顺序处理observers
是合理的,那么在这里使用Flux没有任何好处
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) }
}
可以使用,但此时您更有可能会有其他要求,例如工作池或超时。在这种情况下,反应堆的表现力很有用。