У меня есть Система Актера, которую я хочу начать и жить до определенного актера, Destructor
, получает сообщение ShutdownNow
. Когда он получает такое сообщение, он в основном выполняет эквивалент отключения крючка, закрывает всю систему актера вниз, а затем родительский процесс JVM/основной поток завершает работу: Что-то вроде этого:Управление Аккой Система Актеров Lifecycles
class MyApp {
static void main(String[] args) {
// Do some stuff before starting the actor system.
ActorSystem actorSystem = ActorSystem.create(“myapp-actorsys”)
ActorRef initializer = actorSystem.actorOf(Props.create(Initializer) “initializer”)
Inbox inbox = Inbox.create(actorSystem)
inbox.send(initializer, new Initialize())
// Now the actor system is initialized and is running
// Maybe its processing data off a message broker, etc.
// Here I’d like to wait until the actor system shuts down (see Destructor below)
while(actorSystem.isRunning()) { }
// Now do some final tasks.
} // <- end of main thread/parent JVM process
}
class Destructor extends UntypedActor {
@Override
void onReceive(Object msg) {
if(msg instanceof ShutdownNow) {
// Shut down the actor system such that actorSystem.isRunning()
// will return true.
}
}
}
Идея здесь заключается в том, что родительский процесс JVM остается в живых до тех пор, пока не будет прервана базовая ОС (sigkill и т. д.) или что-то внутри системы актера сообщает ShutdownNow
сообщение соответствующему игроку.
Как это реализовать?