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); }
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 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 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); }
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 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); }
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); }