/* * Copyright (C) 2018-2022 Lightbend Inc. */ package jdocs.cluster; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import akka.actor.ActorSystem; import akka.actor.PoisonPill; import akka.actor.Props; import akka.cluster.singleton.ClusterSingletonManager; import akka.cluster.singleton.ClusterSingletonManagerSettings; import akka.cluster.singleton.ClusterSingletonProxy; import akka.cluster.singleton.ClusterSingletonProxySettings; public class StatsSampleOneMasterMain { public static void main(String[] args) { if (args.length == 0) { startup(new String[] {"2551", "2552", "0"}); StatsSampleOneMasterClientMain.main(new String[0]); } else { startup(args); } } public static void startup(String[] ports) { for (String port : ports) { // Override the configuration of the port Config config = ConfigFactory.parseString("akka.remote.classic.netty.tcp.port=" + port) .withFallback(ConfigFactory.parseString("akka.cluster.roles = [compute]")) .withFallback(ConfigFactory.load("stats2")); ActorSystem system = ActorSystem.create("ClusterSystem", config); // #create-singleton-manager ClusterSingletonManagerSettings settings = ClusterSingletonManagerSettings.create(system).withRole("compute"); system.actorOf( ClusterSingletonManager.props( Props.create(StatsService.class), PoisonPill.getInstance(), settings), "statsService"); // #create-singleton-manager // #singleton-proxy ClusterSingletonProxySettings proxySettings = ClusterSingletonProxySettings.create(system).withRole("compute"); system.actorOf( ClusterSingletonProxy.props("/user/statsService", proxySettings), "statsServiceProxy"); // #singleton-proxy } } }