コード例 #1
0
        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}");
            }
        }
コード例 #2
0
        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;
            }
        }