Каков порядок восстановления Акка.

Я прочитал введение в 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 обработчик.

Другие вопросы по тегам