Подтвердить что ты не робот

Проходит ли ActorRef другим актерам хорошо или плохо?

Я пытаюсь выяснить, не связано ли мое использование передачи Akka ActorRef другим актерам не анти-шаблон.

У меня есть несколько актеров в моей системе. Некоторые из них долговечны (restClientRouter, publisher), а некоторые умирают после этого, они выполнили работу (geoActor). Недолговечные актеры должны отправлять сообщения живым актерам и поэтому нуждаются в их ActorRef s.

  //router for a bunch of other actors
  val restClientRouter = createRouter(context.system)

  //publishers messages to an output message queue
  val publisher: ActorRef = context.actorOf(Props(new PublisherActor(host, channel)), name = "pub-actor")     

  //this actor send a message to the restClientRouter and then sends the response
  //to the publisher 
  val geoActor = context.actorOf(Props(new GeoInferenceActor(restClientRouter, publisher)), name = "geo-inference-actor")

Как вы можете видеть, я передаю ActorRefs (restClientRouter и publisher) конструктору GeoInferenceActor. Это хорошо или нет? Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Есть несколько хороших способов "представить" актерские ссылки на экземпляры актеров, которые в них нуждаются.

1) Создайте актера с refs, в котором он нуждается, как конструктор args (что вы делаете)

2) Передайте необходимые refs с сообщением после создания экземпляра

Ваше решение вполне приемлемо и даже предложено Роланд Куном, Tech Lead для Akka, в этом сообщении:

Поиск актера Аккой или зависимость от него

Ответ 2

Это совершенно справедливо, как указано в документации Akka API:

ActorRefs может свободно делиться между участниками посредством передачи сообщений.

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