Я недавно начал разрабатывать, используя akka Event Sourcing / Sharding для кластеров, и благодаря онлайн-ресурсам, я думаю, я понял основные принципы c и то, как создать простое приложение с ним. Однако я пытаюсь применить эту методологию в несколько более сложной структуре данных:
В качестве примера давайте подумаем о веб-страницах и URL-адресах. Каждая страница может быть представлена актером в кластере (с уникальным идентификатором в качестве пути к странице, например, /questions/60037683).
На каждой странице я могу выдавать такие команды, как
- Создать страницу (поэтому, если страница не существует, она будет создана)
- Редактировать страницу (редактирование сведений о странице)
- Получить содержимое страницы (и дочерние элементы)
Et c.
При выдаче команд на отдельные страницы все просто, как это «написано в руководстве». Но я добавил сложность, которую веб-страница может иметь дочерние, поэтому при создании «дочерней страницы» мне нужно, чтобы родитель обновлял ссылки на ее дочерние элементы.
Я подумал о некоторых возможных подходах, но они чувствуют неполное.
- Отправка всех событий на одну веб-страницу и при создании страницы, поиск родительской страницы (если есть) и сообщение о добавлении нового дочернего элемента
- Отправка всех событий на одну веб-страницу, и при создании страницы сообщение отправляется родителю, а затем создается новая команда, которая скажет дочернему элементу инициализировать
- Создание инфраструктуры в виде WebPageRepository, которая будет отслеживать дерево страниц и будет передавать команды CRUD всем действующим лицам веб-страниц.
Я думаю, что моя настоящая проблема заключается в правильной обработке возврата фьючерсов при передаче сообщений другим акторам, которые должны фактически выполнять работу. .
Я путаюсь, и некоторые ресурсы для чтения будут очень полезны. Preciated.
Спасибо за ваше время.
РЕДАКТИРОВАТЬ: первая версия говорила о общей иерархической структуре, похожей на файловую систему. Я обновил информацию о реальных целях, веб-страницах и URL-адресах и попытался лучше прояснить мои проблемы