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