public static CqrsEngineBuilder Configure()
        {
            var builder = new CqrsEngineBuilder();

            builder.UseProtoBufSerialization();
            builder.Domain(d => d.HandlerSample<IConsume<IMessage>>(m => m.Consume(null)));

            var connection = AzureSettingsProvider.GetString("DiagnosticsConnectionString");
            var storageConfig = AzureStorage.CreateConfig(CloudStorageAccount.Parse(connection), c =>
            {
                c.ConfigureBlobClient(x => x.ReadAheadInBytes = 0x200000L);
                c.Named("dev");
            });

            builder.Azure(m =>
                {
                    m.AddAzureSender(storageConfig, "sample-02");

                    m.AddAzureProcess(storageConfig, "sample-02", x =>
                    {
                        x.DirectoryFilter(f => f.WhereMessagesAre<IMessage>());
                        x.DispatchAsEvents();
                    });
                });

            builder.Advanced.ConfigureContainer(WireTasks);

            return builder;
        }
        public static CqrsEngineBuilder Configure()
        {
            // for more detail about this sample see:
            // http://code.google.com/p/lokad-cqrs/wiki/GuidanceSeries

            var builder = new CqrsEngineBuilder();

            builder.UseProtoBufSerialization();
            builder.Domain(d => d.HandlerSample<IConsume<IMessage>>(m => m.Consume(null)));

            var connection = AzureSettingsProvider.GetString("StorageConnectionString");
            var storageConfig = AzureStorage.CreateConfig(CloudStorageAccount.Parse(connection), c =>
            {
                c.ConfigureBlobClient(x => x.ReadAheadInBytes = 0x200000L);
                c.Named("dev");
            });

            builder.Azure(m =>
                {
                    m.AddAzureSender(storageConfig, "sample - 01");

                    m.AddAzureProcess(storageConfig, "sample-01", x =>
                    {
                        x.DirectoryFilter(f => f.WhereMessagesAre<IMessage>());
                        x.DispatchAsCommandBatch();
                    });
                });

            return builder;
        }
 // ReSharper disable InconsistentNaming
 protected override void CurrentConfig(CqrsEngineBuilder config)
 {
     config.Memory(m =>
     {
         m.AddMemoryProcess("do", x => x.DispatchAsCommandBatch());
         m.AddMemorySender("do", cb => cb.IdGeneratorForTests());
     });
 }
 protected override void EngineConfig(CqrsEngineBuilder b)
 {
     b.Storage(m => m.AtomicIsInFiles(_path, DefaultWithCustomConfig));
     b.Memory(m =>
         {
             m.AddMemoryProcess("azure-dev");
             m.AddMemorySender("azure-dev", x => x.IdGeneratorForTests());
         });
 }
        protected override void CurrentConfig(CqrsEngineBuilder b)
        {
            var dev = AzureStorage.CreateConfigurationForDev();

            WipeAzureAccount.Fast(s => s.StartsWith("test-"), dev);
            b.Azure(m =>
                {
                    m.AddAzureProcess(dev, new[] {"test-incoming"}, c =>
                        {
                            c.QueueVisibility(1);
                            c.DispatchAsCommandBatch();
                        });
                    m.AddAzureSender(dev, "test-incoming", x => x.IdGeneratorForTests());
                });
        }
Exemple #6
0
        private static CqrsEngineHost ConfigureHost()
        {
            var builder = new CqrsEngineBuilder();

             builder.Domain(d =>
             {
                 d.InAssemblyOf<CreateInventoryItem>();
                 d.HandlerSample<IConsume<Define.Command>>(m => m.Consume(null));
             });

             builder.File(f =>
             {
                 f.AddFileSender(storageConfig, "events");
                 f.AddFileProcess(storageConfig, "commands", p =>
                 {
                     p.WhereFilter(x => x.WhereMessagesAre<Define.Command>());
                     p.DispatchAsCommandBatch();
                 });
                 f.AddFileProcess(storageConfig, "events", p=>
                 {
                     p.WhereFilter(x => x.WhereMessagesAre<DomainEvent>());
                     p.DispatchAsEvents();
                 });
             });

             builder.Storage(s =>
             {
                 s.TapeIsInFiles(Path.Combine(storageConfig.Folder.FullName, "eventstore"));
                 s.AtomicIsInFiles(storageConfig.Folder.FullName, b =>
                 {
                     b.WhereEntityIs<IEntity>();
                     b.WhereSingletonIs<ISingleton>();
                 });
                 s.StreamingIsInFiles(storageConfig.Folder.FullName);
             });

             builder.Advanced.ConfigureContainer(c =>
             {
                 c.RegisterType<ReadModelFacade>().As<IReadModelFacade>();

                 c.RegisterType<Repository<InventoryItem>>().As<IRepository<InventoryItem>>();

                 c.RegisterType<EventStore>().As<IEventStore>();
             });

             return builder.Build();
        }
        public void Test()
        {
            var builder = new CqrsEngineBuilder();
            builder.Domain(m =>
                {
                    m.HandlerSample<Definitions.Define.Consumer<Definitions.Define.ICommand>>(c => c.Consume(null));
                    m.ContextFactory((e,x) => new Definitions.Define.MyContext(e.GetAttribute("EntityId","")));
                });
            builder.Storage(m => m.AtomicIsInMemory());
            builder.Memory(m =>
                {
                    m.AddMemorySender("in", c => c.IdGeneratorForTests());
                    m.AddMemoryProcess("in");
                });

            builder.Advanced.ConfigureContainer(cb =>
                {
                    cb.Register(c => new InMemoryEventStreamer<IAccountEvent>(c.Resolve<IMessageSender>())).
                        SingleInstance();

                    cb.RegisterType<InMemoryEventStreamer<IAccountEvent>>().SingleInstance();
                    cb.RegisterType<AccountAggregateRepository>().SingleInstance();

                });

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

                var sender = engine.Resolve<IMessageSender>();
                sender.SendOne(new CreateAccount("Sample User"), cb => cb.AddString("EntityId","1"));
                sender.SendOne(new AddLogin("login","pass"), cb => cb.AddString("EntityId", "1"));

                source.Token.WaitHandle.WaitOne(5000);
                source.Cancel();
            }
        }
        public static CqrsEngineBuilder Configure()
        {
            var builder = new CqrsEngineBuilder();

            builder.Domain(d => d.HandlerSample<IConsume<IMessage>>(m => m.Consume(null)));

            var connection = AzureSettingsProvider.GetString("DiagnosticsConnectionString");

            var storageConfig = AzureStorage.CreateConfig(CloudStorageAccount.Parse(connection), c =>
            {
                c.ConfigureBlobClient(x => x.ReadAheadInBytes = 0x200000L);
                c.Named("dev");
            });

            builder.Azure(m =>
                {
                    m.AddAzureSender(storageConfig, "sample-03");

                    m.AddAzureProcess(storageConfig, "sample-03", x =>
                    {
                        x.DirectoryFilter(f => f.WhereMessagesAre<IMessage>());
                        x.DispatchAsCommandBatch();
                    });
                });

            builder.Advanced.ConfigureContainer(cb =>
                {
                    var config = ConfigureNHibernate.Build("MyDbFile");

                    cb.RegisterModule(new NHibernateModule(config));

                    WireTasks(cb);
                });

            return builder;
        }
        public static CqrsEngineBuilder Configure(string localStorage, string storageConnectionString)
        {
            var dev = AzureStorage.CreateConfig(storageConnectionString,
                c => c.ConfigureBlobClient(x => x.ReadAheadInBytes = 0x200000L));

            var builder = new CqrsEngineBuilder();

            JsonSerialization.SetForMessages(builder);

            builder.MessagesWithHandlersFromAutofac(d =>
                {
                    d.HandlerSample<IHandle<Define.Command>>(m => m.Handle(null));
                    d.InAssemblyOf<RunTaskCommand>();
                });

            builder.Azure(m =>
                {
                    m.AddAzureSender(dev, IdFor.CommandsQueue);
                    m.AddAzureProcess(dev, IdFor.CommandsQueue, x =>
                        {
                            x.DispatchAsCommandBatch(f => f.WhereMessagesAre<Define.Command>());
                            x.Quarantine(c => new Quarantine(c.Resolve<IStreamingRoot>()));
                            x.DecayPolicy(TimeSpan.FromSeconds(0.75));
                        });

                    m.AddAzureSender(dev, IdFor.EventsQueue);
                    m.AddAzureProcess(dev, IdFor.EventsQueue, x =>
                        {
                            x.DispatchAsEvents(f => f.WhereMessagesAre<Define.Event>());
                            x.Quarantine(c => new Quarantine(c.Resolve<IStreamingRoot>()));
                            x.DecayPolicy(TimeSpan.FromSeconds(0.75));
                        });
                });

            builder.Storage(m =>
                {
                    m.AtomicIsInAzure(dev, x =>
                        {
                            x.FolderForEntity(t => "template-view-" + t.Name.ToLowerInvariant());
                            x.NameForEntity((t, o) => o.ToString().ToLowerInvariant() + ".json");
                            x.FolderForSingleton("template-singleton");
                            x.NameForSingleton(t => t.Name.ToLowerInvariant() + ".json");
                            JsonSerialization.SetForStorage(x);
                        });
                    m.StreamingIsInAzure(dev);
                });

            builder.Advanced.RegisterQueueWriterFactory(c => new AzureQueueWriterFactory(dev, c.Resolve<IEnvelopeStreamer>()));

            builder.Advanced.ConfigureContainer(cb =>
                {
                    var queueWriterRegistry = cb.Resolve<QueueWriterRegistry>();
                    var factory = queueWriterRegistry.GetOrThrow(dev.AccountName);
                    var client = new BusClient(factory.GetWriteQueue(IdFor.CommandsQueue), factory.GetWriteQueue(IdFor.EventsQueue));

                    cb.Register<IBusClient>(client);

                    var local = new FileStreamingContainer(localStorage);
                    var remote = new BlobStreamingRoot(dev.CreateBlobClient());

                    cb.Register(new StorageProvider(local, remote));
                    cb.Register<IStreamingRoot>(remote);

                    builder.Setup.AddProcess(new ScanTaskBlob(client, remote));
                });

            return builder;
        }
 protected abstract void EngineConfig(CqrsEngineBuilder b);
        static void TestConfiguration(Action<CqrsEngineBuilder> build, int useMessages)
        {
            var builder = new CqrsEngineBuilder();
            build(builder);

            var subj = new Subject<ISystemEvent>();

            builder.Advanced.Observers.Clear();
            builder.Advanced.RegisterObserver(subj);

            var step = (useMessages / 5);
            int count = 0;
            var watch = new Stopwatch();
            using (var token = new CancellationTokenSource())
            {
                subj
                    .OfType<EnvelopeAcked>()
                    .Subscribe(ea =>
                        {
                            count += 1;

                            if ((count % step) == 0)
                            {
                                var messagesPerSecond = count / watch.Elapsed.TotalSeconds;
                                Console.WriteLine("{0} - {1}", count, Math.Round(messagesPerSecond, 1));
                            }

                            if (ea.Attributes.Any(ia => ia.Key == "last"))
                            {
                                token.Cancel();
                            }
                        });

                using (var engine = builder.Build())
                {
                    // first we send X then we check
                    var sender = engine.Resolve<IMessageSender>();

                    for (int i = 0; i < useMessages; i++)
                    {
                        sender.SendOne(new UsualMessage { HasData = true });
                    }
                    sender.SendOne(new UsualMessage { HasData = true}, b => b.AddString("last"));

                    watch.Start();
                    engine.Start(token.Token);
                    token.Token.WaitHandle.WaitOne(10000);
                }
            }
        }
 protected abstract void CurrentConfig(CqrsEngineBuilder config);
 public static void SetForMessages(CqrsEngineBuilder builder)
 {
     builder.Advanced.CustomDataSerializer(t => new JsonDataSerializer(t));
 }