Каков порядок восстановления Акка.
Я прочитал введение в Akka.Persistence в блоге Petabridge и считаю эту часть кода немного запутанной:
Recover<string>(str => _msgs.Add(str)); // from the journal
Recover<SnapshotOffer>(offer => {
var messages = offer.Snapshot as List<string>;
if(messages != null) // null check
_msgs = _msgs.Concat(messages);
});
Что вы, вероятно, хотите сделать при восстановлении, это... сначала сделать последний снимок, а затем воспроизвести сообщения из журнала поверх него.
Но здесь у нас есть два Recover()
декларации, а журнал первый. Когда Akka .NET выполняет восстановление, как выглядит порядок этих Recover()
методы на самом деле разыгрываются на практике?
1 ответ
Recover
используется только для регистрации обработчика сообщений в объявленном актере, так же как Receive
в ReceiveActor
работает. Поэтому порядок объявления обработчиков восстановления не имеет значения.
Из комментария ниже:
Во время восстановления постоянный субъект сначала спрашивает, есть ли снимки, которые он может использовать для восстановления, поэтому
SnapshotOffer
всегда будет срабатывать перед остальными событиями. Затем он запрашивает события, которые произошли после снимка, который он получил. Они будут обработаны по порядку, они поступят из журнала событий и обработаны при первом совпаденииRecover
обработчик.