public async Task Commit <T>(T aggregate, string streamName, CancellationToken cancellationToken) where T : BaseAggregate
        {
            var domainEvents = aggregate.DomainEvents.OrderBy(_ => _.Version);

            lock (_obj)
            {
                using (var evtStream = _storeEvents.OpenStream(streamName, streamName, int.MinValue, int.MaxValue))
                {
                    lock (domainEvents)
                    {
                        foreach (var domainEvent in domainEvents)
                        {
                            evtStream.Add(new EventMessage {
                                Body = domainEvent
                            });
                        }
                    }

                    evtStream.CommitChanges(Guid.NewGuid());
                }
            }

            await _messageBroker.QueueDomainEvents(domainEvents.ToList(), cancellationToken);

            if (aggregate.Version > 1 && (aggregate.Version - 1) % SNAP_SHOT_FREQUENCY == 0)
            {
                await _aggregateSnapshotStore.Add(new SnapshotElement <BaseAggregate>(0, DateTime.UtcNow, streamName, aggregate));
            }
        }
        public async Task Commit <T>(T aggregate, string streamName, string queueName) where T : BaseAggregate
        {
            using (var evtStream = _storeEvents.OpenStream(streamName, streamName, int.MinValue, int.MaxValue))
            {
                lock (aggregate.DomainEvents)
                {
                    foreach (var domainEvent in aggregate.DomainEvents)
                    {
                        evtStream.Add(new EventMessage {
                            Body = domainEvent
                        });
                    }
                }

                evtStream.CommitChanges(Guid.NewGuid());
            }

            foreach (var evt in aggregate.DomainEvents)
            {
                await _messageBroker.QueueEvent(evt, queueName);
            }

            if (((aggregate.Version - 1) % _serverOptions.SnapshotFrequency) == 0)
            {
                await _aggregateSnapshotStore.Add(new SnapshotElement <BaseAggregate>(0, DateTime.UtcNow, streamName, aggregate));
            }
        }