Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ClusterRouterPoolActor"/> class.
        /// </summary>
        /// <param name="supervisorStrategy">The strategy used to supervise the pool.</param>
        /// <param name="settings">The settings used to configure the router.</param>
        /// <exception cref="ActorInitializationException">
        /// This exception is thrown when this actor is configured as something other than a <see cref="Akka.Routing.Pool"/> router.
        /// </exception>
        public ClusterRouterPoolActor(SupervisorStrategy supervisorStrategy, ClusterRouterPoolSettings settings) : base(settings)
        {
            _supervisorStrategy = supervisorStrategy;
            Settings            = settings;

            var pool = Cell.RouterConfig as Pool;

            if (pool != null)
            {
                Pool = pool;
            }
            else
            {
                throw new ActorInitializationException(
                          $"RouterPoolActor can only be used with Pool, not {Cell.RouterConfig.GetType()}");
            }
        }
        public void Cluster_aware_routers_must_use_provided_supervisor_strategy()
        {
            var escalator = new OneForOneStrategy(
                exception =>
                {
                    TestActor.Tell("supervised");
                    return Directive.Stop;
                });

            var settings = new ClusterRouterPoolSettings(1, 1, true);

            var router =
                Sys.ActorOf(
                    new ClusterRouterPool(new RoundRobinPool(1, null, escalator, Dispatchers.DefaultDispatcherId),
                        settings)
                        .Props(Props.Create(() => new KillableActor(TestActor))), "therouter");

            router.Tell("go away");
            ExpectMsg("supervised");
        }
Esempio n. 3
0
 internal RouterConfig Copy(Pool local = null, ClusterRouterPoolSettings settings = null)
 {
     return(new ClusterRouterPool(local ?? Local, settings ?? Settings));
 }
 public ClusterRouterPoolActor(SupervisorStrategy supervisorStrategy, ClusterRouterPoolSettings settings) : base(settings)
 {
     Settings = settings;
     _supervisorStrategy = supervisorStrategy;
     _pool = (Pool)Cell.RouterConfig;
 }
 public RouterConfig Copy(Pool local = null, ClusterRouterPoolSettings settings = null)
 {
     return new ClusterRouterPool(local ?? (Pool)Local, settings ?? (ClusterRouterPoolSettings)Settings);
 }
        public ClusterRouterPool(Pool local, ClusterRouterPoolSettings settings)
        {
            Settings = settings;
            Local = local;
            RouterDispatcher = local.RouterDispatcher;

            if(local.Resizer != null) throw new ConfigurationException("Resizer can't be used together with cluster router.");
            NrOfInstances = Settings.AllowLocalRoutees ? settings.MaxInstancesPerNode : 0;
            Resizer = local.Resizer;
            SupervisorStrategy = local.SupervisorStrategy;
        }
Esempio n. 7
0
        public ClusterRouterPoolActor(SupervisorStrategy supervisorStrategy, ClusterRouterPoolSettings settings) : base(settings)
        {
            _supervisorStrategy = supervisorStrategy;
            Settings = settings;

            var pool = Cell.RouterConfig as Pool;
            if (pool != null)
            {
                Pool = pool;
            }
            else
            {
                throw new ActorInitializationException("RouterPoolActor can only be used with Pool, not " +
                                                       Cell.RouterConfig.GetType());
            }
        }
Esempio n. 8
0
 internal RouterConfig Copy(Pool local = null, ClusterRouterPoolSettings settings = null)
 {
     return new ClusterRouterPool(local ?? Local, settings ?? Settings);
 }
Esempio n. 9
0
 public ClusterRouterPool(Pool local, ClusterRouterPoolSettings settings)
     : base(settings.AllowLocalRoutees ? settings.MaxInstancesPerNode : 0,
     local.Resizer,
     local.SupervisorStrategy,
     local.RouterDispatcher,
     false)
 {
     if (local.Resizer != null)
         throw new ConfigurationException("Resizer can't be used together with cluster router.");
     Settings = settings;
     Local = local;
 }
Esempio n. 10
0
 public ClusterRouterPoolActor(SupervisorStrategy supervisorStrategy, ClusterRouterPoolSettings settings) : base(settings)
 {
     Settings            = settings;
     _supervisorStrategy = supervisorStrategy;
     _pool = (Pool)Cell.RouterConfig;
 }
Esempio n. 11
0
 public RouterConfig Copy(Pool local = null, ClusterRouterPoolSettings settings = null)
 {
     return(new ClusterRouterPool(local ?? (Pool)Local, settings ?? (ClusterRouterPoolSettings)Settings));
 }