public ProcessManagerSubscription(
            IEventStoreConnectionProvider connectionProvider,
            IEventSerializer eventSerializer,
            ProcessManagerMediator mediator,
            SubscriptionCheckpointStorage checkpointStorage) : base("ProcessManager", connectionProvider.Connection, new CatchAllSubscriptionSettings())
        {
            _eventSerializer   = eventSerializer;
            _mediator          = mediator;
            _checkpointStorage = checkpointStorage;

            _subscriptionCheckpoint = _checkpointStorage.Load(SubscriptionCheckpointId);

            LastCommitPosition = _subscriptionCheckpoint.LastProcessedPosition;
        }
示例#2
0
        public async Task Save(SubscriptionCheckpoint checkpoint)
        {
            var newCheckpointDate = DateTime.UtcNow;

            using (var connection = new SqlConnection(ConnectionString))
            {
                const string sql = "UPDATE SubscriptionCheckpoint SET LastProcessedPosition = @checkpoint, EventsProcessed = @eventsProcessed, UpdatedUtc = @updated WHERE SubscriptionId = @subscriptionId";

                await connection.OpenAsync();

                using (var command = new SqlCommand(sql, connection))
                {
                    command.Parameters.AddWithValue("@subscriptionId", checkpoint.SubscriptionId);
                    command.Parameters.AddWithValue("@checkpoint", checkpoint.LastProcessedPosition);
                    command.Parameters.AddWithValue("@eventsProcessed", checkpoint.EventsProcessed);
                    command.Parameters.AddWithValue("@updated", checkpoint.UpdatedUtc);

                    await command.ExecuteNonQueryAsync();
                }
            }
        }