public override void RouteMessage(object message, PID sender) { if (message is IHashable hashable) { var key = hashable.HashBy(); var node = _hashRing.GetNode(key); var routee = _routeeMap[node]; routee.Request(message, sender); } }
public Task <IEnumerable <Sprocket> > Search(string sessionId, string value) { var replicaId = _ring.GetNode(sessionId); Log.Logger.Information("Performing sprocket search using replica {0}", replicaId); var replica = GrainFactory.GetGrain <ISprocketReadReplicaGrain>(replicaId); return(replica.Search(value)); }
public override void RouteMessage(object message) { (object message, PID sender, MessageHeader headers)env = MessageEnvelope.Unwrap(message); if (env.message is Message message1) { string node = _hashRing.GetNode(""); //message1.HashBy); PID routee = _routeeMap[node]; routee.Tell(message); } else { throw new NotSupportedException($"Message of type '{message.GetType().Name}' does not implement IHashable"); } }
public override void RouteMessage(object message) { var env = MessageEnvelope.Unwrap(message); if (env.message is IHashable hashable) { var key = hashable.HashBy(); var node = _hashRing.GetNode(key); var routee = _routeeMap[node]; routee.Tell(message); } else { throw new NotSupportedException($"Message of type '{message.GetType().Name}' does not implement IHashable"); } }
public override void RouteMessage(object message) { var env = MessageEnvelope.Unwrap(message); if (env.message is IHashable hashable) { var key = hashable.HashBy(); var node = _hashRing.GetNode(key); var routee = _routeeMap[node]; //by design, just forward message RootContext.Empty.Send(routee, message); } else { throw new NotSupportedException($"Message of type '{message.GetType().Name}' does not implement IHashable"); } }
public void GettingStartedSample() { var hashRing = new HashRing <string>(); hashRing.AddNode("a", 100); hashRing.AddNode("b", 200); hashRing.AddNode("a", 250); hashRing.AddNode("c", 300); Assert.Equal("a", hashRing.GetNode(0)); Assert.Equal("a", hashRing.GetNode(100)); Assert.Equal("a", hashRing.GetNode(500)); Assert.Equal("b", hashRing.GetNode(200)); Assert.Equal("a", hashRing.GetNode(225)); Assert.Equal("c", hashRing.GetNode(300)); Assert.Equal("a", hashRing.GetNode(400)); foreach (Partition <string> p in hashRing.Partitions) { this.output.WriteLine($"{p.Node}: ({p.Range.StartExclusive}, {p.Range.EndInclusive}]"); } }