如何处理从Publisher
并行订阅的数据?
Project Reactor
中呼叫subscribe时,我只有一小部分数据。如何“全部耗尽”?答案 0 :(得分:1)
在Project Reactor中,使用parallel()
运算符:
Flux.from(thePublisher) //if we don't assume publisher is already a Flux
.parallel() //instruct the Flux to divide work on "rails",
//but so far these rails are running on the same thread !
.runOn(Schedulers.parallel()) //now each rail runs on its own thread
.map(...).etc(...)
.sequential() //merge the rails back to a single sequence
//subscribe, or continue processing sequentially
RxJava 2非常相似,并且具有相同的parallel
运算符。
答案 1 :(得分:0)
将每个数据块转换为一个任务,然后将其提交给Executor
。转换器可能如下所示:
class Converter implements Subscriber<T> {
final Executor executor;
Subscription subscription;
Converter(Executor executor) {
this.executor = executor;
}
@Override
public void onSubscribe(Subscription s) {
subscription = s;
s.request(1);
}
@Override
public void onNext(T data) {
executor.execute(()->process(data));
subscription.request(1);
}
...
void process(T o) {
...
}
}