基本上,我们有一个生产者,它一次产生一个随机数,几个消费者睡1秒然后打印一个数字。
每个消费者都是独家消费者,每个消费者只能有一个接收者 此行为类似于Java中的JMS队列或BlockingQueue。
在akka流中,我可以找到
balance[T] – (1 input, N outputs) given an input element emits to one of its output ports.
但我找不到rxjava中的任何内置组件做同样的工作
Observable始终向所有观察者广播消息,如pub-sub
样式。如果我需要queue
样式,我该怎么办。
我错过了什么吗?
答案 0 :(得分:2)
我认为你所拥有的心理模型与Rx的构建并不完全匹配 - 想想许多小型操作的流,而不是大型组件之间的消息。
我建议a)一个上限线程池b)一个绕它的RX调度程序然后c:
databaseSource
.fetchItems()
.flatMap(item ->
Obsevable.just(item)
.observeOn(cappedThreadScheduler)
.map(item -> longRunningOperation(item))
)
OTOH,你也可以这样做:
databaseSource
.fetchItems()
.flatMap(item ->
Obsevable.just(item)
.observeOn(schedulers.io())
.map(item -> longRunningOperation(item))
, 16
)
最多可以并行运行16个操作。