Я использую AKKA.NET в своем текущем проекте .NET.
Мой вопрос заключается в следующем: как опытные разработчики AKKA реализуют шаблон повторного сообщения о сбое, используя последние библиотеки AKKA для Java или .NET?
Вот еще некоторые подробности.
Я хочу убедиться, что ошибочное сообщение (т.е. сообщение, полученное актером, приводящее к исключению) повторяется/повторяется несколько раз с временным интервалом между каждым. Обычно актор перезапускается неудачным сообщением и отбрасывается.
Я написал свой собственный небольшой вспомогательный метод, чтобы решить эту проблему:
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;
}
}
}
Теперь мои актеры обычно выглядят так:
Receive<SomeMessage>(msg =>
{
ActorHelper.Instance.WithRetries(-1, Context, Self, Sender, msg, () => {
...here comes the actual message processing
});
});
Мне нравится приведенное выше решение, потому что оно простое. Однако мне не нравится, что это добавляет еще один уровень косвенности в мой код, и код становится немного более беспорядочным, если я использую этот вспомогательный метод во многих местах. Кроме того, он имеет некоторые ограничения. Во-первых, количество повторных попыток не регулируется вспомогательным методом. Это регулируется стратегией надзора супервайзера, которая, я считаю, беспорядочна. Кроме того, временной интервал фиксирован, тогда как в некоторых случаях мне бы хотелось, чтобы временной интервал увеличивался с каждой повторной попыткой.
Я бы предпочел что-то, что можно настроить с помощью HOCON. Или что-то, что может быть применено в качестве перекрестного концерна.
Я вижу различные предложения для AKKA для Scala, AKKA для Java и AKKA.NET. Я видел примеры с маршрутизаторами, примеры с автоматическим выключателем (например, http://getakka.net/docs/CircuitBreaker#examples) и так далее. Я также видел несколько примеров, использующих ту же идею, что и выше. Но мне кажется, что должно быть еще проще. Возможно, это связано с использованием AKKA Persistence и событий.
Итак, повторю мой вопрос: как опытные AKKA-разработчики реализуют шаблон повторного сообщения о сбое, используя последние библиотеки AKKA для Java или .NET?