Обмен данными в Акке - PullRequest
       16

Обмен данными в Акке

0 голосов
/ 24 августа 2018

Я обрабатываю приложение, используя Akka. У меня есть сценарий, в котором актер будет получать определенные значения из базы данных в массиве или списке. Дочерние актеры будут ссылаться на этот список, но им не разрешено изменять или обновлять их.

Можно ли как-то делиться данными между актерами?

1 Ответ

0 голосов
/ 24 августа 2018

Просто сделайте список, который родительский субъект заполняет из базы данных неизменным. Затем родитель может поделиться этим списком с дочерними актерами, не заботясь о подводных камнях, которые сопровождают разделяемое изменяемое состояние . Дочерние субъекты могут запрашивать у родителя список, а родитель может отправлять список детям посредством передачи сообщений. Актеры могут выглядеть примерно так:

case object GetFromDb
case object GetList
case object ProcessList

class ParentActor extends Actor {
  var fromDb: List[Something] = List()

  def receive = {
    case GetFromDb =>
      // query the database and replace fromDb with a new list
      fromDb = // ...
    case GetList =>
      sender() ! fromDb
  }
}

class ChildActor(parent: ActorRef) extends Actor {
  def receive = {
    case ProcessList =>
      // get the list from the parent
      parent ! GetList
    case fromDb: List[Something] =>
      // do something with the list
  }
}

В приведенном выше примере актеры передают неизменный список «как есть», но список может быть легко помещен в класс case, если вы предпочитаете. Также обратите внимание, что дочерние акторы принимают в качестве аргумента конструктора ссылку на родительский актер, но дочерний объект может также использовать context.parent для получения ссылки на своего родителя.

...