Ich verwende AKKA.NET in meinem aktuellen .NET-Projekt.Wiederholen/Wiederholen fehlgeschlagener Nachrichten in AKKA
Meine Frage ist: Wie können erfahrene AKKA-Entwickler das Replay-Message-on-Failure-Muster mit den neuesten AKKA-Bibliotheken für Java oder .NET implementieren?
Hier sind einige weitere Details.
Ich möchte sicherstellen, dass eine fehlgeschlagene Nachricht (d. H. Eine Nachricht, die von einem Akteur empfangen wird, der zu einer Ausnahme führt) mehrmals mit einem Zeitintervall wiederholt wird. Normalerweise wird der Akteur neu gestartet, indem die fehlgeschlagene Nachricht weggeworfen wird.
Ich habe meine eigene kleine Helfer-Methode so geschrieben, es zu lösen:
public void WithRetries(int noSeconds, IUntypedActorContext context, IActorRef receiver, IActorRef sender, Object message, Action action)
{
try
{
action();
}
catch (Exception e)
{
context.System.Scheduler.ScheduleTellOnce(new TimeSpan(0, 0, noSeconds), receiver, message, sender);
throw;
}
}
}
nun in der Regel meine Schauspieler wie folgt aussehen:
Receive<SomeMessage>(msg =>
{
ActorHelper.Instance.WithRetries(-1, Context, Self, Sender, msg,() => {
...here comes the actual message processing
});
});
ich die obige Lösung gefällt, weil es einfach ist. Allerdings mag ich nicht, dass es in meinem Code noch eine weitere Ebene der Indirektion hinzufügt, und der Code wird ein bisschen unordentlicher, wenn ich diese Hilfsmethode an vielen Stellen verwende. Außerdem hat es einige Einschränkungen. Zunächst einmal wird die Anzahl der Wiederholungen nicht von der Hilfsmethode bestimmt. Es wird von der Aufsichtsstrategie des Supervisors geregelt, die ich für chaotisch halte. Außerdem ist das Zeitintervall fest, während ich in manchen Fällen ein Zeitintervall bevorzugen würde, das für jeden erneuten Versuch zunimmt.
Ich würde etwas bevorzugen, das mit HOCON konfiguriert werden kann. Oder etwas, das als Querdenkmal angewendet werden kann.
Ich kann verschiedene Vorschläge für entweder AKKA für Scala, AKKA für Java und AKKA.NET sehen. Ich habe Beispiele mit Routern gesehen, Beispiele mit Circuit Breaker (z.B. http://getakka.net/docs/CircuitBreaker#examples) und so weiter. Ich habe auch einige Beispiele gesehen, die dieselbe Idee wie oben verwenden. Aber ich habe das Gefühl, dass es noch einfacher sein sollte. Vielleicht beinhaltet dies einen gewissen Gebrauch von AKKA Persistence und Events.
Also meine Frage wiederholen: Wie setzen erfahrene AKKA-Entwickler das Replay-Message-on-Failure-Muster mit den neuesten AKKA-Bibliotheken für Java oder .NET um?
Wie dies zu tun Retry/replay im Falle einer fehlgeschlagenen Nachricht in Java mit akka.Wenn jemand weiß, bitte helfen. –