/ / Як відправити повідомлення про вимикання актора з акки від контролера в рамках гри - scala, playframework, event-handling, akka

Як відправити повідомлення відключення актора Akka від контролера в рамках гри - scala, playframework, event-handling, akka

Я новачок в Akka, але дуже сподобався рамки вже. Я переглянув Документація акка актор і деякі навчальні посібники Playframework / typesafe. Я успішно створив актора з успішного запиту POST в контролері

val reapeter = Akka.system.actorOf(Props(classOf[RepeaterActor], data), name = "repeater")

що виконує періодичне завдання з використанням завдання розкладу.

Тепер я хотів би надіслати цьому учаснику повідомлення про зупинку з запиту GET / POST в контролері. я намагався

def stop = Action {
val sendStop = Akka.system.actorSelection("/user/repeater").tell(Shutdown, ActorRef.noSender)
}

і в методі RepeaterActor

receieve {
...
case Shutdown => {
println("shutting down")
context.system.stop(self)
}
}

Але я не можу отримати відповідь. Я не впевнений, що це "проблема з моїм методом actorSelection або як я" "роблю повідомлення викликів. Як я можу реалізувати простий гачок для вимкнення актора з контролера? цих ретрансляторів.

Відповіді:

2 для відповіді № 1

Перш за все println не є гарним рішенням. Реєстратори кращого використання:

import play.api.Logger
val logger = Logger("akka")
logger.debug("shutting down")

Друге - це "вбивство" актора. Є вбудований спосіб зробити це просто відправляючи PoisonPill. Також, якщо ви хочете увійти Actor.postStop метод і всередині журналу.

def postStop(): Unit = {
logger.debug("shutting down")
super.postStop()
}

І з цією конструкцією ви зможете перевірити, якщо ви закриваєте правильно.