Ejemplo n.º 1
0
        public void Test()
        {
            var types = Assembly.GetExecutingAssembly().GetExportedTypes()
                        .Where(t => typeof(IPS_SampleMessage).IsAssignableFrom(t));
            var streamer = EnvelopeStreamer.CreateDefault(types);
            var builder  = new CqrsEngineBuilder(streamer);
            // only message contracts within this class

            // configure in memory:
            //                            -> sub 1
            //  inbox -> [PubSubRouter] <
            //                            -> sub 2
            //
            var store   = new MemoryAccount();
            var nuclear = store.CreateNuclear();

            var router = new PubSubRouter(nuclear, store.CreateWriteQueueFactory(), streamer);

            router.Init();

            builder.Dispatch(store.CreateInbox("sub1"), b => Console.WriteLine("sub1 hit"));
            builder.Dispatch(store.CreateInbox("sub2"), b => Console.WriteLine("sub2 hit"));
            builder.Handle(store.CreateInbox("inbox"), router.DispatchMessage);


            var sender = store.CreateSimpleSender(streamer, "inbox");

            using (var engine = builder.Build())
                using (var cts = new CancellationTokenSource())
                {
                    var task = engine.Start(cts.Token);

                    // no handler should get these.
                    sender.SendOne(new SomethingHappened());
                    sender.SendOne(new OtherHappened());

                    // subscribe sub1 to all messages and sub2 to specific message
                    sender.SendControl(eb =>
                    {
                        eb.AddString("router-subscribe:sub1", ".*");
                        eb.AddString("router-subscribe:sub2", "SomethingHappened");
                    });
                    sender.SendOne(new SomethingHappened());
                    sender.SendOne(new OtherHappened());

                    // unsubscribe all
                    sender.SendControl(eb =>
                    {
                        eb.AddString("router-unsubscribe:sub1", ".*");
                        eb.AddString("router-unsubscribe:sub2", "SomethingHappened");
                    });
                    sender.SendOne(new SomethingHappened());
                    sender.SendOne(new OtherHappened());


                    task.Wait(5000);
                }
        }
        public void PartitionWithRouter()
        {
            var config = new MemoryStorageConfig();
            var raw    = new CqrsEngineBuilder(EnvelopeStreamer.CreateDefault());

            var inWriter = config.CreateQueueWriter("in");
            var doWriter = config.CreateQueueWriter("do");

            // forwarder in => do
            raw.Dispatch(config.CreateInbox("in"), doWriter.PutMessage);
            // forwarder do => in
            raw.Dispatch(config.CreateInbox("do"), inWriter.PutMessage);


            TestConfiguration(inWriter, raw);
        }
Ejemplo n.º 3
0
        public void Test()
        {
            using (var source = new CancellationTokenSource())
            {
                var dev = AzureStorage.CreateConfigurationForDev();
                WipeAzureAccount.Fast(s => s.StartsWith("test-"), dev);
                var b = new CqrsEngineBuilder(null);
                b.Dispatch(dev.CreateInbox("test-publish"), bytes =>
                {
                    if (bytes[0] == 42)
                    {
                        source.Cancel();
                    }
                });


                using (var engine = b.Build())
                {
                    var task = engine.Start(source.Token);

                    dev.CreateQueueWriter("test-publish").PutMessage(new byte[] { 42 });
                    if (!task.Wait(5000))
                    {
                        source.Cancel();
                    }
                }
            }
        }
        public void RouterChain()
        {
            var config   = new MemoryStorageConfig();
            var raw      = new CqrsEngineBuilder(EnvelopeStreamer.CreateDefault());
            var doWriter = config.CreateQueueWriter("do");

            var route1 = config.CreateQueueWriter("route1");
            var route2 = config.CreateQueueWriter("route2");

            // in => (route1 OR route2)
            raw.Dispatch(config.CreateInbox("in"), bytes => LoadBalance(bytes, route1, route2));
            // forwarder (route1,route2) => do
            raw.Dispatch(config.CreateInbox("route1", "route2"), doWriter.PutMessage);

            raw.Dispatch(config.CreateInbox("do"), bytes => LoadBalance(bytes, route1, route2));
            TestConfiguration(config.CreateQueueWriter("in"), raw);
        }
Ejemplo n.º 5
0
        public void when_handle()
        {
            var builder = new CqrsEngineBuilder(null);

            builder.Dispatch(new TestQueueReader(), (b) => { });

            Assert.AreEqual(2, builder.Processes.Count);
            Assert.AreEqual(typeof(DispatcherProcess), builder.Processes[1].GetType());
        }
        public void Memory_lambda()
        {
            var config = new MemoryStorageConfig();
            var writer = config.CreateQueueWriter("test");
            var inbox  = config.CreateInbox("test");

            var builder = new CqrsEngineBuilder(null);

            builder.Dispatch(inbox, bytes => { });

            var setup = new Setup
            {
                Send   = i => writer.PutMessage(new[] { i }),
                Engine = builder.Build()
            };

            TestConfiguration(setup, 1000000);
        }
        public void File_lambda()
        {
            var config = FileStorage.CreateConfig("throughput-tests");

            config.Wipe();

            var writer  = config.CreateQueueWriter("test");
            var inbox   = config.CreateInbox("test", u => TimeSpan.FromMilliseconds(0));
            var builder = new CqrsEngineBuilder(null);

            builder.Dispatch(inbox, bytes => { });

            var setup = new Setup
            {
                Send   = i => writer.PutMessage(new[] { i }),
                Engine = builder.Build()
            };

            TestConfiguration(setup, 1000);
        }
        public void Throughput_Azure_lambda()
        {
            var config = AzureStorage.CreateConfigurationForDev();

            WipeAzureAccount.Fast(s => s.StartsWith("throughput"), config);

            var writer  = config.CreateQueueWriter("test");
            var inbox   = config.CreateInbox("test", u => TimeSpan.Zero);
            var builder = new CqrsEngineBuilder(null);

            builder.Dispatch(inbox, bytes => { });

            var setup = new Setup
            {
                Send   = i => writer.PutMessage(new[] { i }),
                Engine = builder.Build()
            };

            TestConfiguration(setup, 100);
        }