Ejemplo n.º 1
0
 public AggregateDispatcher(ITapeStorageFactory factory, IEnvelopeStreamer streamer, string path, QueueWriterRegistry queue)
 {
     _factory  = factory;
     _streamer = streamer;
     _path     = path;
     _queue    = queue;
 }
        protected override ITapeStream InitializeAndGetTapeStorage()
        {
            var connectionString = Settings.Default.SqlConnectionString;
            var tableName = Settings.Default.SqlTapeWriterTableName;

            _storageFactory = new SqlTapeStorageFactory(connectionString, tableName);

            var count = 0;
            while (true)
            {
                count++;

                try
                {
                    _storageFactory.InitializeForWriting();
                    break;
                }
                catch (Exception)
                {
                    if (count < 1)
                    {
                        System.Threading.Thread.Sleep(500);
                        continue;
                    }

                    throw;
                }
            }

            const string name = "test";
            return _storageFactory.GetOrCreateStream(name);
        }
Ejemplo n.º 3
0
        public static Action <ImmutableEnvelope> Route(Func <string, IQueueWriter> factory, IEnvelopeStreamer serializer,
                                                       ITapeStorageFactory tapes)
        {
            var events      = factory(EventsQueue);
            var timerQueue  = factory(TimerQueue);
            var entityQueue = factory(EntityQueue);
            var services    = factory(ServiceQueue);
            var log         = tapes.GetOrCreateStream(DomainLogName);

            return(envelope =>
            {
                var data = serializer.SaveEnvelopeData(envelope);
                if (!log.TryAppend(data))
                {
                    throw new InvalidOperationException("Failed to record domain log");
                }

                if (envelope.DeliverOnUtc > Current.UtcNow)
                {
                    timerQueue.PutMessage(data);
                    return;
                }
                if (envelope.Items.All(i => i.Content is ICommand <IIdentity>))
                {
                    entityQueue.PutMessage(data);
                    return;
                }
                if (envelope.Items.All(i => i.Content is IEvent <IIdentity>))
                {
                    // we can have more than 1 entity event.
                    // all entity events are routed to events as separate
                    for (int i = 0; i < envelope.Items.Length; i++)
                    {
                        var name = envelope.EnvelopeId + "-e" + i;
                        var copy = EnvelopeBuilder.CloneProperties(name, envelope);
                        copy.AddItem(envelope.Items[i]);
                        events.PutMessage(serializer.SaveEnvelopeData(copy.Build()));
                    }
                    return;
                }

                if (envelope.Items.Length != 1)
                {
                    throw new InvalidOperationException(
                        "Only entity commands or entity events can be batched");
                }
                var item = envelope.Items[0].Content;
                if (item is IFunctionalCommand)
                {
                    services.PutMessage(data);
                    return;
                }
                if (item is IFunctionalEvent || item is ISampleEvent)
                {
                    events.PutMessage(data);
                    return;
                }
                throw new InvalidOperationException(string.Format("Unroutable message {0}", item));
            });
        }
Ejemplo n.º 4
0
 public AggregateDispatcher(ITapeStorageFactory factory, IEnvelopeStreamer streamer, string path, QueueWriterRegistry queue)
 {
     _factory = factory;
     _streamer = streamer;
     _path = path;
     _queue = queue;
 }
Ejemplo n.º 5
0
 public AggregateFactory(ITapeStorageFactory factory, IEnvelopeStreamer streamer, IQueueWriter writer, NuclearStorage storage, IIdentityGenerator generator)
 {
     _factory   = factory;
     _streamer  = streamer;
     _writer    = writer;
     _storage   = storage;
     _generator = generator;
 }
Ejemplo n.º 6
0
        public static Action<ImmutableEnvelope> Route(Func<string, IQueueWriter> factory, IEnvelopeStreamer serializer,
            ITapeStorageFactory tapes)
        {
            var events = factory(EventsQueue);
            var timerQueue = factory(TimerQueue);
            var entityQueue = factory(EntityQueue);
            var services = factory(ServiceQueue);
            var log = tapes.GetOrCreateStream(DomainLogName);
            return envelope =>
                {
                    var data = serializer.SaveEnvelopeData(envelope);
                    if (!log.TryAppend(data))
                        throw new InvalidOperationException("Failed to record domain log");

                    if (envelope.DeliverOnUtc > Current.UtcNow)
                    {
                        timerQueue.PutMessage(data);
                        return;
                    }
                    if (envelope.Items.All(i => i.Content is ICommand<IIdentity>))
                    {
                        entityQueue.PutMessage(data);
                        return;
                    }
                    if (envelope.Items.All(i => i.Content is IEvent<IIdentity>))
                    {
                        // we can have more than 1 entity event.
                        // all entity events are routed to events as separate
                        for (int i = 0; i < envelope.Items.Length; i++)
                        {
                            var name = envelope.EnvelopeId + "-e" + i;
                            var copy = EnvelopeBuilder.CloneProperties(name, envelope);
                            copy.AddItem(envelope.Items[i]);
                            events.PutMessage(serializer.SaveEnvelopeData(copy.Build()));
                        }
                        return;
                    }

                    if (envelope.Items.Length != 1)
                    {
                        throw new InvalidOperationException(
                            "Only entity commands or entity events can be batched");
                    }
                    var item = envelope.Items[0].Content;
                    if (item is IFunctionalCommand)
                    {
                        services.PutMessage(data);
                        return;
                    }
                    if (item is IFunctionalEvent || item is ISampleEvent)
                    {
                        events.PutMessage(data);
                        return;
                    }
                    throw new InvalidOperationException(string.Format("Unroutable message {0}", item));
                };
        }
Ejemplo n.º 7
0
        protected override ITapeStream InitializeAndGetTapeStorage()
        {
            _storageFactory = new FileTapeStorageFactory(_path);
            _storageFactory.InitializeForWriting();

            const string name = "test";

            return(_storageFactory.GetOrCreateStream(name));
        }
        protected override ITapeStream InitializeAndGetTapeStorage()
        {
            var config = AzureStorage.CreateConfig(_cloudStorageAccount);
            _storageFactory = new BlobTapeStorageFactory(config, ContainerName);
            _storageFactory.InitializeForWriting();

            const string name = "test";

            return _storageFactory.GetOrCreateStream(name);
        }
Ejemplo n.º 9
0
        protected override ITapeStream InitializeAndGetTapeStorage()
        {
            var config = AzureStorage.CreateConfig(_cloudStorageAccount);

            _storageFactory = new BlobTapeStorageFactory(config, ContainerName);
            _storageFactory.InitializeForWriting();

            const string name = "test";

            return(_storageFactory.GetOrCreateStream(name));
        }
Ejemplo n.º 10
0
        protected override ITapeStream InitializeAndGetTapeStorage()
        {
            var connectionString = Settings.Default.SqlConnectionString;
            var tableName        = Settings.Default.SqlTapeWriterTableName;

            _storageFactory = new SqlTapeStorageFactory(connectionString, tableName);

            var count = 0;

            while (true)
            {
                count++;

                try
                {
                    _storageFactory.InitializeForWriting();
                    break;
                }
                catch (Exception)
                {
                    if (count < 1)
                    {
                        System.Threading.Thread.Sleep(500);
                        continue;
                    }

                    throw;
                }
            }



            const string name = "test";

            return(_storageFactory.GetOrCreateStream(name));
        }
 protected override void FreeResources()
 {
     _storageFactory = null;
     _storageFactory = null;
 }
Ejemplo n.º 12
0
 protected override void FreeResources()
 {
     _storageFactory = null;
 }
Ejemplo n.º 13
0
        protected override ITapeStream InitializeAndGetTapeStorage()
        {
            _storageFactory = new FileTapeStorageFactory(_path);
            _storageFactory.InitializeForWriting();

            const string name = "test";
            return _storageFactory.GetOrCreateStream(name);
        }
Ejemplo n.º 14
0
 public void TapeIs(ITapeStorageFactory storage)
 {
     _tapeStorage = storage;
 }
Ejemplo n.º 15
0
 public void TapeIs(ITapeStorageFactory storage)
 {
     _tapeStorage = storage;
 }
 public AggregateFactory(ITapeStorageFactory factory, IEnvelopeStreamer streamer, IQueueWriter writer)
 {
     _factory  = factory;
     _streamer = streamer;
     _writer   = writer;
 }
Ejemplo n.º 17
0
 public EventStore(IMessageSender sender, ITapeStorageFactory tapeFactory, IDataSerializer serializer)
 {
     this.sender = sender;
     this.tapeFactory = tapeFactory;
     this.serializer = serializer;
 }