Reaktive Sink - Vermeiden Sie die Überlaufvorstellung
Posted: 08 May 2025, 13:34
Ich habe diese Spüle in meiner App konfiguriert: < /p>
Dies ist zwar, obwohl ich die Backpression konfiguriert habe. Daher bedeutet es wahrscheinlich, dass die Backpressur -Warteschlange bereits voll war und Elemente immer wieder in die Spüle emittiert wurden, während einer der Abonnenten mit dem Rate nicht umgehen konnte, richtig? Muss diesen heißen Publisher haben, der Sink, um unendlich zu sein, er kann nicht aufhören zu arbeiten.Sinks.many().multicast().directBestEffort()
< /code>
, was, wenn ich richtig verstanden habe, nur Elemente fallen ließen, wenn meine Abonnenten nicht mit der Rate umgehen können, in der Elemente in die Spüle emittiert werden. zu haben (puffer einige Elemente, anstatt sofort fallen zu lassen), aber auch den Überlauffehler zu vermeiden und stattdessen fallen zu lassen? Oder auf andere Weise?
Danke! < /P>
Code: Select all
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>
Jetzt bin ich mir leider nicht sicher, ob ich verstehe, was mein Fehlerhandler tut oder wie ich es konfigurieren kann, um das zu tun, was ich will.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)
< /code>
, was, wenn ich richtig verstanden habe, nur Elemente fallen ließen, wenn meine Abonnenten nicht mit der Rate umgehen können, in der Elemente in die Spüle emittiert werden. zu haben (puffer einige Elemente, anstatt sofort fallen zu lassen), aber auch den Überlauffehler zu vermeiden und stattdessen fallen zu lassen? Oder auf andere Weise?
Danke! < /P>