我有一个从SQS读取的线程,并且希望将每个消息发布到具有单个使用者的反应堆处理器上。消费者可能需要花费1-2秒来处理消息。如果使用者忙,我希望发布线程能够等待。我还想使使用者并行化,但是如果所有线程都忙,它仍然会保持背压并降低发布者的速度。这是我到目前为止的内容,但我看不到发布商的速度变慢。
private EmitterProcessor<T> rp = EmitterProcessor.create(1);
void publish(T object) {
rp.onNext(object);
}
void addConsumer(Consumer<T> subscriber) {
ParallelFlux<T> flux = rp.parallel(workers, 1).runOn(Schedulers.parallel());
if (backpressure) {
flux.subscribe(new BaseSubscriber<T>() {
@Override
protected void hookOnSubscribe(Subscription subscription) {
request(1);
}
@Override
protected void hookOnNext(T value) {
subscriber.accept(value);
request(1);
}
});
} else {
flux.subscribe(subscriber);
}
}
有什么想法吗?