Сохранить тайник с Akka.net

#akka.net

#akka.net

Вопрос:

У меня есть задание, выполняемое несколько раз в день. Между этими моментами сообщения сохраняются.

Как вы обрабатываете этот тайник, если серверу требуется перезагрузка? Может быть, тайник — это не то, что следует использовать?

Ответ №1:

Ответ, вероятно, зависит от вашего варианта использования. Если вас в первую очередь беспокоят контролируемые отключения, то вы можете отправить сообщение субъекту перед завершением работы, чтобы либо обработать сохраненные сообщения раньше, либо сохранить их во временном хранилище до перезапуска субъекта.

Это не принесет вам большой пользы, если система актера выйдет из строя. Для защиты от этого вы можете просто сохранить сообщение в базе данных, текстовом файле или другом механизме хранения по вашему выбору вместо использования хранилища. Создайте дочернего субъекта («субъект хранения» ниже) для обработки ввода-вывода за вас (поскольку это потенциально рискованная операция).

Родительский субъект имеет (как минимум) два состояния: Listening и Processing . В то время Listening как он отправляет любые сообщения, которые поступают субъекту хранилища, который записывает их в репозиторий. Когда ваше задание выполняется, тогда субъект Become() s Processing .

Когда состояние родительского субъекта изменяется на Processing родительские сообщения, субъект хранения и запрашивает, чтобы все сохраненные сообщения были отправлены обратно. Они принимаются и обрабатываются соответствующим образом. Когда субъект хранилища отправил все имеющиеся у него сообщения, он отправляет Complete сообщение. Затем Become() родительский субъект Listening снова, и цикл начинается заново.

В других случаях вы можете захотеть использовать Akka.Сохранение. Это слишком большая тема, чтобы вдаваться в нее, но вы можете найти информацию, необходимую для принятия обоснованного решения, здесь: http://bartoszsypytkowski.com/how-akka-net-persistence-works /

Другая вещь, которую я бы рассмотрел, заключается в том, действительно ли этот процесс требует пакетной обработки. В системах сообщений существуют некоторые допустимые варианты пакетного использования, особенно при взаимодействии с другими системами, не основанными на сообщениях, но если это используется внутри вашей системы actor, моим первым действием будет посмотреть, можно ли выполнить процесс в режиме реального времени.