Как осуществить повторную попытку при отказе переходного актора? - PullRequest
3 голосов
/ 05 августа 2011

Я нахожусь в типичной ситуации, когда у меня есть группа рабочих актеров, которые получают задания из очереди. Сбои работника могут быть либо временными и из-за среды, либо постоянными и из-за недопустимого задания.

Внутри рабочего субъекта я работаю со случаем постоянного сбоя, но как я могу осуществить повторную попытку для переходных случаев? С супервизором я могу перезапустить актера, который желательно попытаться вернуть в рабочее состояние, но как тогда я могу повторить сообщение, с которым он работал, в случае сбоя?

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Если вы работаете с Akka 1.2 или master, вы можете переопределить preRestart, чтобы получить сообщение, которое было текущим на момент сбоя актера.

1 голос
/ 05 августа 2011

Вам необходимо реализовать шаблон Command. Команда - это объект, который инкапсулирует выполняемую операцию вместе со своими аргументами и существует независимо от субъекта. Если Актер терпит неудачу способом, который является повторяемым, супервизор повторно передает Команду Актору. Если субъект получает поток и обрабатывает сообщения, он должен заполнить список команд и завершить запись, чтобы он мог перезапуститься в нужном месте. Если поток не перематывается, вам нужно поставить в очередь ВСЕ команды перед запуском, и субъект должен записать состояние завершения для каждой команды, чтобы при повторном сбое цепочка могла быть повторно отправлена.

Шаблон Command также можно использовать для реализации истории и отмены.

...