Esempio n. 1
0
        private Task AppendToStream(string processId, object @event, string bucketId = null)
        {
            var streamId  = GetStreamId(processId, bucketId);
            var eventId   = DeterministicEventIdGenerator.Generate(@event, 0, streamId, Guid.NewGuid());
            var eventData = _serializer.SerializeEventData(@event, eventId);

            return(_connection.AppendToStreamAsync(streamId, ExpectedVersion.Any, eventData));
        }
        private Task <WriteResult> AppendToStream(string streamId, int expectedVersion, object @event)
        {
            var eventId = DeterministicEventIdGenerator.Generate(@event, streamId, expectedVersion);

            return(_connection.AppendToStreamAsync(
                       streamId.FormatStreamIdWithBucket(),
                       expectedVersion,
                       _serializer.SerializeEventData(@event, @eventId)));
        }
Esempio n. 3
0
        protected void RaiseEvent(object @event)
        {
            if (@event == null)
            {
                return;
            }
            ApplyEvent(@event);
            var eventId = DeterministicEventIdGenerator.Generate(@event, _id, Version);

            _uncommittedEvents.Add(new UncommittedEvent(eventId, Version, @event));
        }
        public async Task When_new_resolved_event_then_should_dispatch()
        {
            await _nodeStarted;

            var dispatchedEvents = new List <EventMessage <TestEvent> >();
            var handlerModule    = new TestHandlerModule(dispatchedEvents);

            var serializer = new DefaultGetEventStoreJsonSerializer();

            using (var host = new ResolvedEventDispatcher(
                       _connection, serializer,
                       new InMemoryCheckpointRepository(),
                       new HandlerResolver(handlerModule)))
            {
                var projectedEvents = host
                                      .ProjectedEvents.Replay();

                using (projectedEvents.Connect())
                {
                    await host.Start();

                    Task <ResolvedEvent> commitProjected = projectedEvents
                                                           .Take(1)
                                                           .ToTask()
                                                           .WithTimeout(TimeSpan.FromSeconds(5));

                    var @event = new TestEvent();

                    var streamId  = "events".FormatStreamIdWithBucket();
                    var eventId   = DeterministicEventIdGenerator.Generate(@event, 1, streamId, Guid.NewGuid());
                    var eventData = serializer.SerializeEventData(@event, eventId);

                    await _connection.AppendToStreamAsync(streamId, ExpectedVersion.Any, eventData);

                    await commitProjected;

                    dispatchedEvents.Count.Should().Be(1);
                    dispatchedEvents[0].Headers.Should().NotBeNull();
                    dispatchedEvents[0].Version.Should().Be(0);
                    dispatchedEvents[0].DomainEvent.Should().BeOfType <TestEvent>();
                }
            }
        }
        public async Task When_handler_throws_Then_invoke_exception_callback()
        {
            await _nodeStarted;

            var serializer    = new DefaultGetEventStoreJsonSerializer();
            var handlerModule = new TestHandlerModule(new List <EventMessage <TestEvent> >());

            using (var host = new ResolvedEventDispatcher(
                       _connection, serializer,
                       new InMemoryCheckpointRepository(),
                       new HandlerResolver(handlerModule)))
            {
                var projectedEvents = host
                                      .ProjectedEvents.Replay();

                using (projectedEvents.Connect())
                {
                    await host.Start();

                    Task <ResolvedEvent> commitProjected = projectedEvents
                                                           .Take(1)
                                                           .ToTask()
                                                           .WithTimeout(TimeSpan.FromSeconds(5));

                    var @event    = new TestEventThatThrows();
                    var streamId  = "events";
                    var eventId   = DeterministicEventIdGenerator.Generate(@event, 1, streamId, Guid.NewGuid());
                    var eventData = serializer.SerializeEventData(@event, eventId);

                    await _connection.AppendToStreamAsync(streamId, ExpectedVersion.Any, eventData);

                    Func <Task> act = async() => await commitProjected;

                    act.ShouldThrow <Exception>();
                }
            }
        }