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); }
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); }
/// <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); }
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)); } } } }
/// <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));
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)); }
protected internal virtual void Unsubscribe(Routee <P> routee) => routees.Remove(routee);
public static Routing <T> With <T>(Routee <T>?routee) => new Routing <T>(new List <Routee <T> > {