Как и где обрабатывать постоянные события AkkaPersistence, чтобы сделать информацию ценной и значимой для адаптивного пользовательского интерфейса?

Я хорошо знаком с работой PersistentActor и PersistentView при реализации Akka Persistence.

Рассмотрим следующий пример с идеей, насколько я понимаю.

Класс случая Scala Contact.

case class Contact(id: String, version: Int, fName: String, lName: String, age: Int)

Сохраняемые события PersistentActor в журнале:

ContactCreated("123af-232ff-232d", 1, "john", "doe", 25)
FirstNameChanged("123af-232ff-232d", 2, "jan")
AgeChanged("123af-232ff-232d", 3, 27)
FirstNameChanged("123af-232ff-232d", 4, "janet")

Каждый раз, когда команды отправляются из отзывчивого пользовательского интерфейса, такие новые события сохраняются, если проверка прошла успешно 202 CommandAccepted или любая ошибка CommandValidationError была запущена в ответ.

Но без существенной задержки в адаптивной среде пользовательский интерфейс должен иметь возможность запрашивать серверную часть REST API и отображать последний объект Contact после серверной отправки WebSocket. strong> сообщает пользовательскому интерфейсу, что UUID «123af-232ff-232d» доступен для чтения:

Contact("123af-232ff-232d", 4, "janet", "doe", 27)

Этот результат должен получиться после объединения всех событий с последними доступными данными, насколько я понимаю.

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

Заранее большое спасибо, если кто-то может пролить свет на реализацию или исправление моей мысли.


person PainPoints    schedule 05.09.2015    source источник
comment
Пожалуйста, поправьте меня, если я неправильно понял поток от внешнего интерфейса к внутреннему и наоборот в реактивном отзывчивом приложении.   -  person PainPoints    schedule 05.09.2015
comment
Это где я должен поддерживать текущее состояние внутри PersistentActor, объединяя все сгенерированные события после их сохранения? и немедленно отправить команду запроса GET из пользовательского интерфейса, чтобы прочитать текущее состояние и отобразить данные?   -  person PainPoints    schedule 05.09.2015
comment
... но все же... перед отправкой запроса GET пользовательскому интерфейсу необходимо знать, что текущее состояние доступно...   -  person PainPoints    schedule 05.09.2015


Ответы (1)


Текущее состояние Contact может быть не столько представлением, сколько фактическим состоянием, и в представлении вы не примете возможную согласованность, как это будет в случае с представлением.

Я бы сохранил это как состояние внутри постоянного актора и разрешил запрос к актеру, чтобы получить текущий Contact и использовать его.

person johanandren    schedule 05.09.2015
comment
Например, мне нужно запросить список контактов, не слишком ли тяжело поддерживать состояние «contactList» внутри PersistentActor в памяти? - person PainPoints; 07.09.2015
comment
Я нашел ссылку на свои ответы: groups.google.com/forum/ #!topic/akka-user/MNDc9cVG1To Настойчивость Akka на стороне запросов: заключение - person PainPoints; 07.09.2015