Пример #1
0
 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);
     }
 }
Пример #2
0
        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));
        }
Пример #3
0
 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");
            }
        }
Пример #6
0
        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}]");
            }
        }