public void Dulicate_message_is_detected()
        {
            var builder = new CqrsEngineBuilder();
            builder.Memory(m =>
                {
                    m.AddMemorySender("in", s => s.IdGenerator(() => "same"));
                    m.AddMemoryRouter("in", c => "memory:null");
                });
            var observer = new ImmediateEventsObserver();
            builder.Advanced.RegisterObserver(observer);

            using (var token = new CancellationTokenSource())
            using (var build = builder.Build())
            {
                var sender = build.Resolve<IMessageSender>();
                sender.SendOne(new Message());
                sender.SendOne(new Message());

                observer.Event += @event =>
                    {
                        var e = @event as EnvelopeDuplicateDiscarded;

                        if (e != null)
                        {
                            token.Cancel();
                        }
                    };
                build.Start(token.Token);
                token.Token.WaitHandle.WaitOne(10000);
                Assert.IsTrue(token.IsCancellationRequested);
            }
        }
 // 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());
         });
 }
        private static CqrsEngineBuilder GetBuilder()
        {
            var builder = new CqrsEngineBuilder();

            //NOTE: Core Lokad CQRS Initialization
            builder.UseProtoBufSerialization();

            builder.Domain(config =>
            {
                config.InAssemblyOf<CreateMessage>();
                config.InAssemblyOf<CreateMessageHandler>();
                config.ContextFactory(MyMessageContext.Factory);
            });

            builder.Memory(config =>
            {
                config.AddMemoryProcess(Queues.MESSAGES, d=>{});
                config.AddMemorySender(Queues.MESSAGES);
            });

            builder.Storage(config =>
            {
                var folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "storage");
                if (!Directory.Exists(folder))
                    Directory.CreateDirectory(folder);

                config.AtomicIsInFiles(folder, s =>
                {
                    s.NameForSingleton(type => DefaultAtomicStorageStrategyBuilder.CleanName(type.Name) + ".json");
                    s.NameForEntity((type, key) => (DefaultAtomicStorageStrategyBuilder.CleanName(type.Name) + "-" + Convert.ToString(key, CultureInfo.InvariantCulture).ToLowerInvariant()) + ".json");
                    s.WithAssemblyOf<MessageView>();
                    s.CustomStaticSerializer(new AtomicStorageSerializerWithJson());
                });
                config.StreamingIsInFiles(folder);
            });

            //NOTE: Event Store Initialization
            builder.ConfigureJonathanOliverEventStore(config =>
            {
                const string CONNECTION_STRING = @"Data Source=.\sqlexpress;Initial Catalog=lokad-cqrs-eventstore;Integrated Security=True";

                config.ConnectionString(CONNECTION_STRING);
                config.Hooks(p => p.Add<MyNullPipelineHook>());
                config.Snapshots(s =>
                {
                    s.Enable();
                    s.AggregateTypeResolver(typeName => Type.GetType(typeName + ",Domain"));
                    s.CheckEvery(TimeSpan.FromSeconds(30));
                    //set this to something reasonable like 250.
                    //It's so low here to demonstrate background "out-of-band" snapshotting.
                    s.MaxThreshold(5);
                });
            });

            return builder;
        }
Exemplo n.º 5
0
        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();
            }
        }