生命周期示例中未执行Akka postStop
我是akka的新手,我一直在遵循文档示例。 我已经运行过停止actors,但输出不包含清理消息。似乎这个例子是错误的,或者我错过了什么 为什么停止后信号没有到达MasterControlProgram生命周期示例中未执行Akka postStop,akka,actor,Akka,Actor,我是akka的新手,我一直在遵循文档示例。 我已经运行过停止actors,但输出不包含清理消息。似乎这个例子是错误的,或者我错过了什么 为什么停止后信号没有到达MasterControlProgram import akka.actor.typed.Behavior import akka.actor.typed.scaladsl.Behaviors import akka.actor.typed.{ ActorSystem, PostStop } object MasterControlP
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import akka.actor.typed.{ ActorSystem, PostStop }
object MasterControlProgram {
sealed trait Command
final case class SpawnJob(name: String) extends Command
final case object GracefulShutdown extends Command
// Predefined cleanup operation
def cleanup(log: Logger): Unit = log.info("Cleaning up!")
def apply(): Behavior[Command] = {
Behaviors
.receive[Command] { (context, message) =>
message match {
case SpawnJob(jobName) =>
context.log.info("Spawning job {}!", jobName)
context.spawn(Job(jobName), name = jobName)
Behaviors.same
case GracefulShutdown =>
context.log.info("Initiating graceful shutdown...")
// perform graceful stop, executing cleanup before final system termination
// behavior executing cleanup is passed as a parameter to Actor.stopped
Behaviors.stopped { () =>
cleanup(context.system.log)
}
}
}
.receiveSignal {
case (context, PostStop) =>
context.log.info("Master Control Program stopped")
Behaviors.same
}
}
}
object Job {
sealed trait Command
def apply(name: String): Behavior[Command] = {
Behaviors.receiveSignal[Command] {
case (context, PostStop) =>
context.log.info("Worker {} stopped", name)
Behaviors.same
}
}
}
import MasterControlProgram._
val system: ActorSystem[Command] = ActorSystem(MasterControlProgram(), "B7700")
system ! SpawnJob("a")
system ! SpawnJob("b")
Thread.sleep(100)
// gracefully stop the system
system ! GracefulShutdown
Thread.sleep(100)
Await.result(system.whenTerminated, 3.seconds)
这是输出:
22:32:11.797 [B7700-akka.actor.default-dispatcher-6] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
22:32:11.868 [B7700-akka.actor.default-dispatcher-3] INFO MasterControlProgram$ - Spawning job a!
22:32:11.877 [B7700-akka.actor.default-dispatcher-3] INFO MasterControlProgram$ - Spawning job b!
22:32:11.958 [B7700-akka.actor.default-dispatcher-6] INFO MasterControlProgram$ - Initiating graceful shutdown...
22:32:12.011 [B7700-akka.actor.default-dispatcher-3] INFO Job$$anonfun$apply$4 - Worker b stopped
22:32:12.011 [B7700-akka.actor.default-dispatcher-6] INFO Job$$anonfun$apply$4 - Worker a stopped
这是一个在2.6.4中修复的错误,请参见这是一个在2.6.4中修复的错误,请参见链接的文档中的示例代码。我现在把它放在帖子里。在我的机器上工作。好吧,也许这是一个与日志记录而不是参与者机制有关的问题。示例代码在链接的文档中。我现在把它放在帖子里。在我的机器上工作。好吧,也许这是一个与日志记录而不是参与者机制有关的问题。