使用ParallelFlux进行接收会导致OOM

时间:2017-04-06 08:29:16

标签: java spring-cloud spring-cloud-stream project-reactor

我有一个反应式接收器,我想用ParallelFlux以​​并行方式处理消息,但似乎它释放了kafkalistener线程并且它会消耗消息,直到没有足够的内存(我用jmap检查它和内存中填充了Message<>实例)。

我必须补充一点,如果没有消费者延迟,那么消息处理得很好,但如果存在显着的消费者滞后,则它开始消耗内存。

@StreamListener(MySink.INPUT)
public void handleMessage(final Flux<Message<byte[]>> input) {
    input
            .parallel()
            .runOn(Schedulers.parallel())
            .map(this::parseMessage)
            .filter(this::messageNotEmpty)
            .doOnNext(this::processMessage)
            .doOnNext(this::adjustState)
            .sequential()
            .subscribe(this::acknowledgeMessage);
}

请帮忙,如何在线程池已满的情况下编写一个并行处理的接收器来阻塞主线程(kafkalistener)?

0 个答案:

没有答案