Я использую akka для динамического создания актеров и уничтожения их, когда они закончены с конкретной работой. У меня есть ручка создания актера, однако остановка актеров хранит их в памяти, независимо от того, как я их прекратил. В конечном итоге это вызывает исключение из памяти, несмотря на то, что в любой момент времени у меня должно быть только несколько активных участников.Акка Актеры все еще доступны после остановки PoisonPill
Я использовал:
self.tell(PoisonPill, self)
и:
context.stop(self)
, чтобы попытаться уничтожить актеров. Есть идеи?
Редактировать: Вот немного больше, чтобы отразить то, что я пытаюсь сделать. Программа открывается и порождает десять актеров.
val system = ActorSystem("system")
(1 to 10) foreach { x =>
Entity.count += 1
system.actorOf(Props[Entity], name = Entity.count.toString())
}
Вот код для лица:
class Entity() extends Actor {
Entity.entities += this
val id = Entity.count
import context.dispatcher
val tick = context.system.scheduler.schedule(0 millis, 100 millis, self, "update")
def receive = {
case "update" => {
Entity.entities.foreach(that => collide(that))
}
}
override def postStop() = tick.cancel()
def collide(that:Entity) {
if (!this.isBetterThan(that)) {
destroyMe()
spawnNew()
}
}
def isBetterThan() :Boolean = {
//computationally intensive logic
}
private def destroyMe(){
Entity.entities.remove(Entity.entities.indexOf(this))
self.tell(PoisonPill, self)
//context.stop(self)
}
private def spawnNew(){
val system = ActorSystem("system")
Entity.count += 1
system.actorOf(Props[Entity], name = Entity.count.toString())
}
}
object Entity {
val entities = new ListBuffer[Entity]()
var count = 0
}
Можете ли вы показать больше кода о том, где вы создаете актера и как остановить актера? эти актеры обрабатывают что-то бесконечно? – 757071
Помните, что недостаточно отправить актера PoisonPill; актер должен прожевать все сообщения, которые ему предшествовали. В тот момент, когда сообщение PoisonPill действительно будет отправлено, актер убит. – AmigoNico
http://letitcrash.com/post/30165507578/shutdown-patterns-in-akka-2 – AmigoNico