Exemplo n.º 1
0
        public void DefaultResizer_must_use_settings_to_evaluate_capacity()
        {
            var resizer = new DefaultResizer(lower: 2, upper: 3);
            var c1      = resizer.Capacity(Enumerable.Empty <Routee>());

            c1.Should().Be(2);

            var current = new Routee[]
            {
                new ActorRefRoutee(Sys.ActorOf <ResizerTestActor>()),
                new ActorRefRoutee(Sys.ActorOf <ResizerTestActor>())
            };

            var c2 = resizer.Capacity(current);

            c2.Should().Be(0);
        }
Exemplo n.º 2
0
        public void DefaultResizer_must_use_settings_to_evaluate_capacity()
        {
            var resizer = new DefaultResizer(2, 3);
            var c1      = resizer.Capacity(new Routee[] { });

            c1.ShouldBe(2);

            var current = new Routee[]
            {
                new ActorRefRoutee(Sys.ActorOf <ResizerTestActor>()),
                new ActorRefRoutee(Sys.ActorOf <ResizerTestActor>())
            };

            Thread.Sleep(100);
            var c2 = resizer.Capacity(current);

            c2.ShouldBe(0);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Fills in self address for local <see cref="IActorRef"/>
        /// </summary>
        public Address FullAddress(Routee routee)
        {
            Address a = null;

            if (routee is ActorRefRoutee)
            {
                a = ((ActorRefRoutee)routee).Actor.Path.Address;
            }
            else if (routee is ActorSelectionRoutee)
            {
                a = ((ActorSelectionRoutee)routee).Selection.Anchor.Path.Address;
            }

            if (a == null || string.IsNullOrEmpty(a.Host) || !a.Port.HasValue)
            {
                return(Cluster.SelfAddress);                                                               //local address
            }
            return(a);
        }
Exemplo n.º 4
0
        private async ValueTask Start()
        {
            Exception createFail = null;
            var       completed  = 0;

            for (var partitionIndex = 0; partitionIndex < _topicMetadata.NumPartitions(); partitionIndex++)
            {
                var producerId = await _generator.Ask <long>(NewProducerId.Instance);

                var partitionName = TopicName.Get(Topic).GetPartition(partitionIndex).ToString();
                var producer      = _context.ActorOf(Props.Create(() => new ProducerActor <T>(producerId, Client, _lookup, _cnxPool, _generator, partitionName, Conf, partitionIndex, Schema, Interceptors, ClientConfiguration)));
                var co            = await producer.Ask <AskResponse>(Connect.Instance, ClientConfiguration.OperationTimeout);

                if (!co.Failed)
                {
                    _producers.Add(producer);
                    var routee = Routee.FromActorRef(producer);
                    _router.Tell(new AddRoutee(routee));
                }
                else
                {
                    State.ConnectionState = HandlerState.State.Failed;
                    createFail            = co.Exception;
                }
                if (++completed == _topicMetadata.NumPartitions())
                {
                    if (createFail == null)
                    {
                        State.ConnectionState = HandlerState.State.Ready;
                        _log.Info($"[{Topic}] Created partitioned producer");
                        Sender.Tell(co);
                    }
                    else
                    {
                        _log.Error($"[{Topic}] Could not create partitioned producer: {createFail}");
                        Sender.Tell(createFail);
                        Client.Tell(new CleanupProducer(_self));
                    }
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// See <see cref="Router{P}.ComputeRouting"/>
        /// </summary>
        protected internal override Routing <P> ComputeRouting()
        {
            Routee <P> least      = null;
            var        leastCount = int.MaxValue;

            foreach (var routee in Routees)
            {
                var count = routee.PendingMessages;
                if (count == 0)
                {
                    least = routee;
                    break;
                }
                else if (count < leastCount)
                {
                    least      = routee;
                    leastCount = count;
                }
            }

            return(Routing.With(least));
        }
 private double WorkerNodeLoadIndex(Routee arg)
 {
     return(0.0);    // put your real calculation here
 }
 public void Unsubscribe(IInvoiceSubmitter submitter)
 => Unsubscribe(Routee <IInvoiceSubmitter> .Of(submitter));
Exemplo n.º 8
0
 public ConsistentMapGroup(IDictionary <string, IActorRef> keyedActors) : this(keyedActors.ToDictionary(p => p.Key, p => p.Value.Path.ToString()))
 {
     _routees = keyedActors.ToDictionary(p => p.Key, p => Routee.FromActorRef(p.Value));
 }
Exemplo n.º 9
0
 protected internal virtual void Unsubscribe(Routee <P> routee) => routees.Remove(routee);
Exemplo n.º 10
0
 public static Routing <T> With <T>(Routee <T>?routee)
 => new Routing <T>(new List <Routee <T> > {