Ejemplo n.º 1
0
        public MainModule()
        {
            Get["/"] = x =>
            {
                var repo    = new PersonRepository();
                var persons = repo.GetAll();
                return(Response.AsJson(persons));
            };

            //Post["/"] = x =>
            //{
            //    var person = this.Bind<Person>();
            //    var repo = new PersonRepository();
            //    if (!repo.Exists(person.Name))
            //    {
            //        Console.WriteLine("Person with name {0} was added", person.Name);
            //        repo.Add(person);
            //    }
            //    else
            //    {
            //        Console.WriteLine("Person with name {0} already exists", person.Name);
            //    }

            //    return (Response)"OK";
            //};

            Post["/", true] = async(x, ct) =>
            {
                var person   = this.Bind <Person>();
                var envelope = new ConsistentHashableEnvelope(person, person.Name);
                var result   = await AkkaUtil.PersonPostActor.Ask <string>(envelope);

                return((Response)result);
            };
        }
Ejemplo n.º 2
0
        private static void WithHashPool()
        {
            var builder = new ContainerBuilder();

            builder.RegisterType <TypedWorker>();

            var container = builder.Build();


            using (var system = ActorSystem.Create("MySystem"))
            {
                var propsResolver =
                    new AutoFacDependencyResolver(container, system);

                var router = system.ActorOf(propsResolver.Create <TypedWorker>().WithRouter(FromConfig.Instance), "router1");

                Task.Delay(500).Wait();
                Console.WriteLine("Sending Messages");

                for (var i = 0; i < 5; i++)
                {
                    for (var j = 0; j < 7; j++)
                    {
                        var msg = new TypedActorMessage {
                            Id = j, Name = Guid.NewGuid().ToString()
                        };
                        var ms = new AnotherMessage {
                            Id = j, Name = msg.Name
                        };

                        var envelope = new ConsistentHashableEnvelope(ms, msg.Id);

                        router.Tell(msg);
                        router.Tell(envelope);
                    }
                }
                Console.WriteLine("Hit Enter to close");
                Console.ReadLine();
            }
        }
Ejemplo n.º 3
0
        internal override async ValueTask InternalSend(IMessage <T> message)
        {
            switch (State.ConnectionState)
            {
            case HandlerState.State.Ready:
            case HandlerState.State.Connecting:
                break;     // Ok

            case HandlerState.State.Closing:
            case HandlerState.State.Closed:
                Sender.Tell(new PulsarClientException.AlreadyClosedException("Producer already closed"));
                return;

            case HandlerState.State.Terminated:
                Sender.Tell(new PulsarClientException.TopicTerminatedException("Topic was terminated"));
                return;

            case HandlerState.State.ProducerFenced:
                Sender.Tell(new PulsarClientException.ProducerFencedException("Producer was fenced"));
                return;

            case HandlerState.State.Failed:
            case HandlerState.State.Uninitialized:
                Sender.Tell(new PulsarClientException.NotConnectedException());
                return;
            }

            if (Conf.MessageRoutingMode == MessageRoutingMode.ConsistentHashingMode)
            {
                var msg = new ConsistentHashableEnvelope(new InternalSend <T>(message), message.Key);
                _router.Tell(msg, Sender);
            }
            else
            {
                _router.Tell(new InternalSend <T>(message), Sender);
            }

            await Task.CompletedTask;
        }
Ejemplo n.º 4
0
        private static void WithHashPool()
        {
            Ninject.IKernel container = new Ninject.StandardKernel();
            container.Bind <TypedWorker>().To(typeof(TypedWorker));


            using (var system = ActorSystem.Create("MySystem"))
            {
                var propsResolver =
                    new NinjectDependencyResolver(container, system);

                var router = system.ActorOf(propsResolver.Create <TypedWorker>().WithRouter(FromConfig.Instance), "router1");

                Task.Delay(500).Wait();
                Console.WriteLine("Sending Messages");

                for (var i = 0; i < 5; i++)
                {
                    for (var j = 0; j < 7; j++)
                    {
                        var msg = new TypedActorMessage {
                            Id = j, Name = Guid.NewGuid().ToString()
                        };
                        var ms = new AnotherMessage {
                            Id = j, Name = msg.Name
                        };

                        var envelope = new ConsistentHashableEnvelope(ms, msg.Id);

                        router.Tell(msg);
                        router.Tell(envelope);
                    }
                }
            }


            Console.ReadLine();
        }
Ejemplo n.º 5
0
        private static void WithHashPool()
        {
            using (var system = ActorSystem.Create("MySystem"))
            {
                IWindsorContainer container = new WindsorContainer();
                container.Register(Component.For <TypedWorker>().Named("TypedWorker").LifestyleTransient());



                var propsResolver =
                    new WindsorDependencyResolver(container, system);

                var router = system.ActorOf(system.DI().Props <TypedWorker>().WithRouter(FromConfig.Instance), "router1");

                Task.Delay(500).Wait();
                Console.WriteLine("Sending Messages");
                for (var i = 0; i < 5; i++)
                {
                    for (var j = 0; j < 7; j++)
                    {
                        var msg = new TypedActorMessage {
                            Id = j, Name = Guid.NewGuid().ToString()
                        };
                        var ms = new AnotherMessage {
                            Id = j, Name = msg.Name
                        };

                        var envelope = new ConsistentHashableEnvelope(ms, msg.Id);

                        router.Tell(msg);
                        router.Tell(envelope);
                    }
                }
                Console.WriteLine("Hit Enter to exit");
                Console.ReadLine();
            }
        }
Ejemplo n.º 6
0
        private void InternalSendWithTxn(IMessage <T> message, IActorRef txn)
        {
            switch (State.ConnectionState)
            {
            case HandlerState.State.Ready:
            case HandlerState.State.Connecting:
                break;     // Ok

            case HandlerState.State.Closing:
            case HandlerState.State.Closed:
                Sender.Tell(new PulsarClientException.AlreadyClosedException("Producer already closed"));
                return;

            case HandlerState.State.Terminated:
                Sender.Tell(new PulsarClientException.TopicTerminatedException("Topic was terminated"));
                return;

            case HandlerState.State.ProducerFenced:
                Sender.Tell(new PulsarClientException.ProducerFencedException("Producer was fenced"));
                return;

            case HandlerState.State.Failed:
            case HandlerState.State.Uninitialized:
                Sender.Tell(new PulsarClientException.NotConnectedException());
                return;
            }

            if (Conf.MessageRoutingMode == MessageRoutingMode.ConsistentHashingMode)
            {
                var msg = new ConsistentHashableEnvelope(new InternalSendWithTxn <T>(message, txn), message.Key);
                _router.Tell(msg, Sender);
            }
            else
            {
                _router.Tell(new InternalSendWithTxn <T>(message, txn), Sender);
            }
        }