Ejemplo n.º 1
0
        public static CqrsEngineBuilder Configure(FileStorageConfig cache)
        {
            var observer = new ImmediateEventsObserver();

            observer.Event += @event =>
            {
                var failed = @event as EnvelopeDispatchFailed;

                if (failed != null)
                {
                    Trace.WriteLine(failed.Exception);
                }
            };

            var builder = new CqrsEngineBuilder();

            builder.Advanced.RegisterObserver(observer);
            builder.Advanced.RegisterQueueWriterFactory(context => new FileQueueWriterFactory(cache, context.Resolve <IEnvelopeStreamer>()));
            builder.Domain(m =>
            {
                m.HandlerSample <IConsume <IBaseMessage> >(c => c.Consume(null));
                m.InAssemblyOf <StoryViewHandler>();
                m.InAssemblyOf <AddNote>();
                m.InAssemblyOf <StoryList>();
            });
            builder.Advanced.CustomDataSerializer(t => new DataSerializerWithProtoBuf(t));
            builder.Advanced.CustomEnvelopeSerializer(new EnvelopeSerializerWithProtoBuf());
            builder.Storage(c =>
            {
                RegisterAtomicStorage(cache, c);
                c.TapeIsInFiles(Path.Combine(cache.Folder.FullName, "tapes"));
            });

            builder.File(m =>
            {
                m.AddFileSender(cache, "router", cm => cm.IdGeneratorForTests());
                m.AddFileProcess(cache, "router", x => x.DispatcherIsLambda(SaveAndRoute));
                m.AddFileProcess(cache, "events", p => p.DispatchAsEvents(md => md.WhereMessagesAre <IEvent>()));
                m.AddFileProcess(cache, "aggregates", p => p.DispatcherIs(context =>
                {
                    var readers  = context.Resolve <ITapeStorageFactory>();
                    var streamer = context.Resolve <IEnvelopeStreamer>();
                    var reg      = context.Resolve <QueueWriterRegistry>();
                    return(new AggregateDispatcher(readers, streamer, "files:router", reg));
                }));
            });
            return(builder);
        }
        protected override void CurrentConfig(CqrsEngineBuilder config)
        {
            var currentDirectory = Directory.GetCurrentDirectory();
            var bus = Path.Combine(currentDirectory, "test");
            var dir = new DirectoryInfo(bus);

            if (dir.Exists)
            {
                dir.Delete(true);
            }
            var store = FileStorage.CreateConfig(bus, "file");

            config.File(m =>
            {
                m.AddFileProcess(store, "do", x => x.DispatchAsCommandBatch());
                m.AddFileSender(store, "do", cb => cb.IdGeneratorForTests());
            });
        }