in pekko-sample-distributed-workers-scala/src/main/scala/worker/Main.scala [58:82]
def start(port: Int, role: String, workers: Int = 2): Unit = {
ActorSystem(
Behaviors.setup[SelfUp](ctx => {
val cluster = Cluster(ctx.system)
cluster.subscriptions ! Subscribe(ctx.self, classOf[SelfUp])
createWorkResultsConsumer(ctx)
Behaviors.receiveMessage {
case SelfUp(_) =>
ctx.log.info("Node is up")
if (cluster.selfMember.hasRole("back-end")) {
WorkManagerSingleton.init(ctx.system)
}
if (cluster.selfMember.hasRole("front-end")) {
val workManagerProxy = WorkManagerSingleton.init(ctx.system)
ctx.spawn(FrontEnd(workManagerProxy), "front-end")
}
if (cluster.selfMember.hasRole("worker")) {
(1 to workers).foreach(n => ctx.spawn(Worker(), s"worker-$n"))
}
Behaviors.same
}
}),
"ClusterSystem",
config(port, role))
}