Корреляция сообщений в Акке - PullRequest
0 голосов
/ 25 мая 2018

Я учу акку.Допустим, у нас есть несколько студентов-актеров, которые задают вопросы на английском языке, несколько актеров-учителей, которые отвечают на португальском языке, и только один актер-переводчик, как показано на диаграмме ниже.

enter image description here

Как я могу соотнести вопросы с их ответами?

  • Должен ли я вести список корреляции как состояние в актере переводчика?
  • Должен ли я добавить полный путь ученикаактер в качестве поля в полезной нагрузке сообщения, поэтому актер-переводчик может найти студента, который задал вопрос (используя actorSelection метод ActorSystem )?
  • Есть ли у Akka какие-либовстроенная функция, которая автоматически отслеживает «стек вызовов»?
  • Другой способ?

PS.В этом примере есть только три типа актеров, но давайте также рассмотрим, что между ними может быть много других актеров.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Ниже приведены несколько пунктов (не обязательно в том же порядке, что и ваши вопросы), которые могут решить вашу проблему:

  • Если вы хотите найти вопросы, заданные студентом,имеет смысл сохранить частный Map с actorRef или actorPath (*) актера ученика в качестве ключа и соответствующие идентификаторы вопроса (например, назначенные с использованием случайных UUID) в качестве значений.Поскольку Map очень эффективен (O (1)) при поиске по ключу, весьма обычно поддерживать даже еще одну Map замену ключа и значения, если также необходим поиск по вопросу.

  • Что касается масштабируемости, я бы сохранил минимальный Map, удалив вопросы, которые, например, уже были отправлены учителям.Обработанные вопросы могут быть сохранены в базе данных (например, Redis, Cassandra) для аналитических запросов, если это необходимо.

  • Вопросы, отправленные субъекту-переводчику, будут сопоставляться с шаблоном в зависимости от их языка / темы.для отправки в соответствующие учителя актеров.В зависимости от требований бизнеса, вопросы могут быть, например, округлены для группы квалифицированных актеров-преподавателей через маршрутизатор Akka .

  • Ответыможет быть отправлено непосредственно от учителей к ученикам или через посредника (может быть актером-переводчиком), если требуется дополнительная обработка ответов.

  • Akka хранит сообщения, отправленные актеру, в своем mailbox и позволяет оперативную настройку.Чтобы вести детальный учет вопросов и ответов, я бы порекомендовал применить вашу собственную программную логику и при необходимости сохранить ее в базе данных.

(*) Это сводится к конкретным бизнес-требованиям ввыбирая между actorRef и actorPath.Основное отличие состоит в том, может ли реинкарнация актера произойти.Например, если вы хотите обработать нового студенческого актера, который использует тот же actorPath законченного студенческого актера, как отдельного студента, используйте actorRef.См. Akka doc для получения более подробной информации.

0 голосов
/ 25 мая 2018

Я рекомендую вам другой подход.И ученик, и учитель общаются друг с другом напрямую.Если они не понимают язык, они могут воспользоваться услугой переводчика, чтобы получить сообщение на нужном языкеТаким образом, учащимся и преподавателям не нужно знать, на каком языке используется другой, и поддерживать протокол общения намного проще.

...