Реактивная раковина - избегание переполнения.JAVA

Программисты JAVA общаются здесь
Anonymous
Реактивная раковина - избегание переполнения.

Сообщение Anonymous »

У меня есть эта раковина, настроенная в моем приложении: < /p>
createdSink = Sinks.many().multicast().onBackpressureBuffer(4096);

public void activityCreated(ActivityResource createdActivity) {
try {
var notification = new ActivityCreatedNotification(createdActivity);
createdSink.emitNext(notification, getFailureHandler());
} catch (Exception e) {
log.error("Emit activity created notification for activity id {} failed", createdActivity.getId(), e);
}
}

private static Sinks.EmitFailureHandler getFailureHandler() {
return Sinks.EmitFailureHandler.busyLooping(Duration.ofSeconds(5));
}
< /code>
Теперь, к сожалению, я не уверен, что понимаю, что делает мой обработчик неудачи, или как мне настроить его, чтобы сделать то, что я хочу. < /p>
Но я надеялся получить некоторую помощь отсюда.2025-05-05T05:46:01.312Z ERROR [] [reactor-http-epoll-25] [00000000-0000-4000-a000-000000000000][][][TRACE_ID:b42fa551661d9427][] [c.e.d.p.a.e.ActivityExternalNotificationService.lambda$prepareExternalNotif
ications$3(79)] - Error while processing activity notification
reactor.core.Exceptions$OverflowException: Backpressure overflow during Sinks.Many#emitNext
at reactor.core.Exceptions.failWithOverflow(Exceptions.java:249)
< /code>
Это, несмотря на то, что у меня настроено обратное давление, поэтому это, вероятно, означает, что очередь обратного давления уже была заполнена, и элементы оставались излучающимися в раковину, в то время как один из подписчиков не мог справиться с скоростью, верно? Издатель, раковина, чтобы быть бесконечным, он не может прекратить работать.Sinks.many().multicast().directBestEffort()
< /code>
, который, если я правильно понял, просто сбросил бы элементы, если мои подписчики не могут справиться с скоростью, в которой элементы излучаются в раковину.
, так что это может быть решением, но из того, как кажется, это не позволяет мне также иметь доход на задний план, как сегодня, я не могу иметь вопрос. Приятно иметь (буферизируйте некоторые элементы вместо того, чтобы сразу же падать), но также избежать ошибки переполнения и вместо того, чтобы отбросить? или другой способ?
спасибо! < /p>

Подробнее здесь: https://stackoverflow.com/questions/796 ... wexception

Вернуться в «JAVA»