Я новачок в 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()
}
І з цією конструкцією ви зможете перевірити, якщо ви закриваєте правильно.