Реактивная раковина - избегание переполнения.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$prepareExternalNotifications$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)
Это, хотя у меня настроено обратное давление, поэтому это, вероятно, означает, что очередь обратного давления уже была заполнена, и элементы оставались излучами в раковину, в то время как один из подписчиков не мог справиться с скоростью, верно? У меня должен быть этот горячий издатель, раковина, чтобы быть бесконечным, он не может прекратить работать.Sinks.many().multicast().directBestEffort()
< /code>
, который, если я правильно понял, просто сбросил бы элементы, если мои подписчики не могут справиться с скоростью, в которой элементы испускают в раковину.
, так что это может быть решением, но, похоже, это не позволяет мне также иметь дочерность обратного давления. Приятно иметь (буферизируйте некоторые элементы вместо того, чтобы сразу же падать), но также избежать ошибки переполнения и вместо того, чтобы отбросить? Или разными средствами?
спасибо! < /P>

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

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