Exemplo n.º 1
0
        static void Main()
        {
            Console.WriteLine("Starting server...");

            using (var system = new ActorsSystem())
                using (StatsService.Run(system.Monitor))
                {
                    var listener = QueuedActor.Of(new ConnectionListener(Addresses.Listener, system));
                    system.SubscribeByAddress(listener);

                    var connectionWorkers = QueuedActor.Of(mailbox1 => new RoundRobinActor(
                                                               id: Addresses.ConnectionWorkers,
                                                               workerFactory: () => QueuedActor.Of(mailbox2 => new ClientConnectionWorker(system, mailbox2), system.Monitor),
                                                               degreeOfParallelism: 2, system: system, mailBox: mailbox1));
                    system.SubscribeByAddress(connectionWorkers);
                    system.Monitor.MonitorActor(connectionWorkers);

                    system.Send(new StartListening());

                    Console.WriteLine("Server started");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadLine();
                }

            Console.WriteLine("Finished");
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            using (var system = new ActorsSystem())
            {
                var trader = QueuedActor.Of(new StopLossTrader(Addresses.TraderAddress, system));
                system.SubscribeByAddress(trader);

                var orderProcessor = QueuedActor.Of(new OrderProcessor(Addresses.OrderProcessorAddress, system));
                system.SubscribeByAddress(orderProcessor);

                var market = QueuedActor.Of(new Market(ActorId.GenerateNew(), system));
                system.SubscribeByAddress(market);

                Console.WriteLine("Press any key to stop");
                Console.ReadLine();
            }
        }
Exemplo n.º 3
0
        public void should_distribute_messages_in_a_round_robin_fashion_with_queues()
        {
            //arrange
            var actor1 = new MyTestActor(ActorId.GenerateNew());
            var actor2 = new MyTestActor(ActorId.GenerateNew());

            var factory         = From(QueuedActor.Of(actor1), QueuedActor.Of(actor2));
            var roundRobinActor = QueuedActor.Of(new RoundRobinActor(ActorId.GenerateNew(), factory, 2, null, new DummyMailBox()));

            //act
            roundRobinActor.Handle(new MyTestMessage1());
            roundRobinActor.Handle(new MyTestMessage1());
            roundRobinActor.Handle(new MyTestMessage1());

            //assert
            Thread.Sleep(500);
            Check.That(actor1.HandledMessages).HasSize(2);
            Check.That(actor2.HandledMessages).HasSize(1);
        }
Exemplo n.º 4
0
        private static void Main(string[] args)
        {
            Console.ReadLine();

            using (var system = new ActorsSystem())
            {
                var generator = new Generator(ActorId.GenerateNew(), system);
                system.SubscribeByAddress(generator);

                var connectionWorkers = QueuedActor.Of(mailbox1 => new RoundRobinActor(
                                                           id: Addresses.TcpWritersDispatcher,
                                                           workerFactory:
                                                           () => QueuedActor.Of(mailbox2 => new TcpWriter(ActorId.GenerateNew(), system, mailbox2), system.Monitor),
                                                           degreeOfParallelism: 5,
                                                           system: system,
                                                           mailBox: mailbox1));

                system.SubscribeByAddress(connectionWorkers);
                system.Monitor.MonitorActor(connectionWorkers);

                var diskWriter       = new DiskWriter(Addresses.DiskWriter);
                var queuedDiskWriter = QueuedActor.Of(diskWriter);
                system.SubscribeByAddress(queuedDiskWriter);
                system.Monitor.MonitorActor(queuedDiskWriter);


                var stopwatch = new Stopwatch();
                stopwatch.Start();
                system.Send(new GenerateNextMessage(generator.Id));

                Console.WriteLine("Stresser running");
                //Console.WriteLine("Press any key to stop...");
                //Console.ReadLine();

                diskWriter.AllJobDone.Wait();
                stopwatch.Stop();
                Console.WriteLine("Speed: {0} msg/sec", ((float)diskWriter.TotalMessagesProcessed) / stopwatch.ElapsedMilliseconds * 1000);
            }
        }