问题(简化):我有很多事件需要发布到RabbitMQ,为了提高效率,我想批处理消息然后发布它们。这些事件在多个线程上并且正在同时创建
使用反应器3.2.8。释放
eventProcessor = EmitterProcessor.create(batchingProperties.getOverflowBufferSize(), true);
eventSink = eventProcessor.sink(FluxSink.OverflowStrategy.LATEST);
eventProcessor
.bufferTimeout(batchingProperties.getBufferSize(),
Duration.ofSeconds(batchingProperties.getBufferSeconds()),
eventPublisherScheduler)
.parallel()
.runOn(eventPublisherScheduler)
.map(list -> batchFunction.apply(list))
.subscribe(this::processEventList, this::processEventError, this::processComplete);
我只是从多个线程发布这样的内容
eventSink.next(event);
这不起作用,我不确定如何使它起作用,因为我收到了丢失的消息,这些消息被静默丢弃。
问题1:如何正确打印掉信?
如果我添加
.onBackpressureBuffer(100, item -> {
LOGGER.error("dropping {}", item);
})
在bufferTimeout之前,我得到一个错误:
reactor.core.Exceptions $ OverflowException:接收器溢出的信号超出了预期的数量(受限制的队列...)
问题2: 如何正确实施此方法,显然我做不到这一点?
问题3: 我如何做到这一点,以便它阻止调用eventSink.next(event)的线程,而不是获取overflowException?