2013-11-12 2 views
12

Мы строим многокомпонентную систему на основе Akka-кластеров. Каждый компонент является отдельным Play! проект, и с самого начала он присоединяется к кластеру Akka, а компоненты начинают искать действующих лиц для работы.Строительство Модульные системы Akka

Проблема

У меня есть две проблемы с этой установкой:

  1. Написание тестового кода очень трудно (мы не выясняли это еще), особенно при написании тестов, которые полагаются на нескольких актеров исходя из разных компонентов. Как мы можем решить зависимость и создать надлежащий кластер в тестовом коде (между двумя игровыми приложениями!)

  2. Во время разработки каждый разработчик должен запустить несколько экземпляров Sbt для загрузки системы (разные игровые проекты), и это ест вся системная память и развитие становятся невероятно медленными.

Что я ищу

Я думал об использовании кластера «роли» свойство сделать выборочную загрузку, это означает, что есть только один проект Play и компоненты (модули) и в загрузке проекта воспроизведения я сканирую текущее свойство ролей этого экземпляра и на основе этого я запускаю или останавливаю определенные компоненты/актеры.

Это облегчит тестирование, но я не знаю точно, как это сделать в Play, особенно, что некоторые компоненты на самом деле предлагают RESTful API (Play Controllers), и я не знаю, как включать/отключать маршруты и контроллеры на время загрузки.

Есть ли какой-либо документ или что-то, что показывает правильный способ построения модульной распределенной системы или любых подсказок? (Что-то еще, что касается того, как SBT должен быть установлен

Edit 1: Проект живет в одном хранилище и имеет одну SBT сборку (несколько-проектов)

ответ

7

Это хороший вопрос, и я буду отвечать на него в части, хотя я не эксперт Играть

1 -. Письменные тесты

Я бы рекомендовал модули тестирования в изоляции, чтобы избежать экспоненциальный взрыв необходимых тестов для этой цели актеры очень. хорошая абстракция, потому что вы можете тривиально высмеять любого актера, введя TestProbe вместо реального ActorRef. В кластере вам обычно нужно искать службы на других узлах, а это означает, что в тесте вы создаете свой зонд и вводите его путь (probe.ref.path) вместо пути, который вы искали бы в производственной системе.

Второй аспект касается интеграционных тестов, для которых вы хотите участвовать в нескольких услугах. В этом случае вам не нужно запускать «правильный» кластер с несколькими JVM, вы можете просто развернуть несколько ActorSystems в своем тесте и связаться с ними по адресу "localhost".

2 - развертывания развития

нет необходимости запускать несколько экземпляров SBT, вы можете просто создать подходящий Основной класс, который запускает все необходимые ActorSystems в рамках одного процесса, так же, как для испытаний, как указаны выше.

3 - Узел управления ролями

ActorSystem управляется Play, как правило, имеют «внешний интерфейс» роль. В дополнение к этому вы можете запускать больше систем с разными ролями, которые сами по себе не являются приложениями Play. Запуск различных действий - запуск различных сервисов и инициирование различных действий - имеет смысл на основе роли узла, мы делаем это сами в тестах и ​​реальных приложениях.

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

Смежные вопросы