public async Task SpawnEntities() { for (var i = 0; i < EntityCount; i++) { var msg = new ShardedMessage(i.ToString(), i); await _shardRegion1.Ask <ShardedMessage>(msg); } }
public async Task Setup() { var config = StateMode switch { StateStoreMode.Persistence => CreatePersistenceConfig(), StateStoreMode.DData => CreateDDataConfig(), _ => null }; _sys1 = ActorSystem.Create("BenchSys", config); _sys2 = ActorSystem.Create("BenchSys", config); var c1 = Cluster.Get(_sys1); var c2 = Cluster.Get(_sys2); await c1.JoinAsync(c1.SelfAddress); await c2.JoinAsync(c1.SelfAddress); _shardRegion1 = StartShardRegion(_sys1); _shardRegion2 = StartShardRegion(_sys2); _localRouter = _sys1.ActorOf(Props.Create <ShardedProxyEntityActor>(_shardRegion1).WithRouter(new RoundRobinPool(1000))); var s1Asks = new List <Task <ShardedEntityActor.ResolveResp> >(20); var s2Asks = new List <Task <ShardedEntityActor.ResolveResp> >(20); foreach (var i in Enumerable.Range(0, 20)) { s1Asks.Add(_shardRegion1.Ask <ShardedEntityActor.ResolveResp>(new ShardingEnvelope(i.ToString(), ShardedEntityActor.Resolve.Instance), TimeSpan.FromSeconds(3))); s2Asks.Add(_shardRegion2.Ask <ShardedEntityActor.ResolveResp>(new ShardingEnvelope(i.ToString(), ShardedEntityActor.Resolve.Instance), TimeSpan.FromSeconds(3))); } // wait for all Ask operations to complete await Task.WhenAll(s1Asks.Concat(s2Asks)); _entityOnSys2 = s1Asks.First(x => x.Result.Addr.Equals(c2.SelfAddress)).Result.EntityId; _entityOnSys1 = s2Asks.First(x => x.Result.Addr.Equals(c1.SelfAddress)).Result.EntityId; _messageToSys1 = new ShardedMessage(_entityOnSys1, 10); _messageToSys2 = new ShardedMessage(_entityOnSys2, 10); }
public SendShardedMessage(string entityId, ShardedMessage message) { EntityId = entityId; Message = message; }
public BeginSend(ShardedMessage msg, IActorRef target, int batchSize) { Msg = msg; Target = target; BatchSize = batchSize; }