private static async Task EventAppeared(EventStorePersistentSubscriptionBase eventStorePersistentSubscriptionBase, ResolvedEvent resolvedEvent) { if (resolvedEvent.Event.EventNumber > 0 && resolvedEvent.Event.EventNumber % 500 == 0) { var metaJsonData = Encoding.UTF8.GetString(resolvedEvent.Event.Metadata); var eventMetaData = JsonConvert.DeserializeObject <DomainMetadata>(metaJsonData); if (eventMetaData.Schema != AccountSchema.SchemaName) { return; } var account = await _repository.GetAccountById(Guid.Parse(eventMetaData.StreamId)); await _eventStore.SaveSnapshot(new AccountEventStreamId(account.Id), new AccountSnapShot() { Balance = account.State.Balance, AccountNumber = account.State.AccountNumber, StreamId = account.Id, SnapshotStreamVersion = account.StreamVersion }); Console.WriteLine($"Account: {eventMetaData.StreamId}, balance: {account.State.Balance}"); Console.WriteLine($"Event {resolvedEvent.Event.EventNumber}: {resolvedEvent.Event.EventId}"); } }
private static async Task CreateStreams(int number) { var id = Guid.Parse($"42a11f29-4578-4d19-b1ec-544260ea40{number:D2}"); var stopwatch = new Stopwatch(); for (int i = 0; i < 2000; i++) { //var repository2 = new AccountRepository(eventStore); stopwatch.Start(); var account = await _accountSnapshotRepository.GetAccountById(id); //var account2 = await repository2.GetAccountById(id); ReadTimings[number].Add(stopwatch.ElapsedMilliseconds); stopwatch.Restart(); if (account == null) { account = new Account(id); } for (int y = 0; y < 100; y++) { account.AddEvent(new AccountDebitedEvent { Amount = 10, AmountExcl = 7.5m, VatAmount = 2.5m }); //account.AddEvent(new AccountDebitedEvent2 //{ // AmountExcl = 7.5m, // VatAmount = 2.5m //}); } if (i > 0 && i % 5 == 0) { account.AddEvent(new MonthlyInvoicePeriodEndedEvent()); } await _accountSnapshotRepository.SaveAccount(account); WriteTimings[number].Add(stopwatch.ElapsedMilliseconds); Balances[number] = account.State.Balance; } }