private App() { var settings = new DefaultHandlerSettings( new HandlerModule(), new DefaultRequestTypeResolver("cedar", Enumerable.Empty <Type>())); var commitDispatcherFailed = new TaskCompletionSource <Exception>(); //MidFunc blah = CommandHandlingMiddleware.HandleCommands(settings); //_middleware = CreateGate(commitDispatcherFailed.Task) _middleware = CommandHandlingMiddleware.HandleCommands(settings); _storeEvents = Wireup.Init().UsingInMemoryPersistence().Build(); var eventStoreClient = new EventStoreClient(_storeEvents.Advanced); _durableCommitDispatcher = new DurableCommitDispatcher( eventStoreClient, new InMemoryCheckpointRepository(), new HandlerModule(), TransientExceptionRetryPolicy.Indefinite(TimeSpan.FromMilliseconds(500))); _durableCommitDispatcher.ProjectedCommits.Subscribe( _ => { }, commitDispatcherFailed.SetResult); _durableCommitDispatcher.Start().Wait(); }
public async Task When_new_commit_then_should_dispatch() { using (IStoreEvents eventStore = Wireup.Init().UsingInMemoryPersistence().Build()) { var dispatchedEvents = new List<EventMessage<TestEvent>>(); var handlerModule = new TestHandlerModule(dispatchedEvents); using(var host = new DurableCommitDispatcher( new EventStoreClient(eventStore.Advanced), new InMemoryCheckpointRepository(), new HandlerResolver(handlerModule))) { var projectedCommits = host .ProjectedCommits .Replay(); using(projectedCommits.Connect()) { await host.Start(); var streamId = Guid.NewGuid().ToString().FormatStreamIdWithBucket(); Guid commitId = Guid.NewGuid(); Task<ICommit> commitProjected = projectedCommits .Take(1) .ToTask(); using(IEventStream stream = eventStore.CreateStream(streamId)) { stream.Add(new global::NEventStore.EventMessage { Body = new TestEvent() }); stream.CommitChanges(commitId); } host.PollNow(); await commitProjected; dispatchedEvents.Count.Should().Be(1); dispatchedEvents[0].Commit().Should().NotBeNull(); dispatchedEvents[0].Headers.Should().NotBeNull(); dispatchedEvents[0].Version.Should().Be(1); dispatchedEvents[0].DomainEvent.Should().BeOfType<TestEvent>(); } } } }
public async Task When_handler_throws_Then_invoke_exception_callback() { using (IStoreEvents eventStore = Wireup.Init().UsingInMemoryPersistence().Build()) { var projectedEvents = new List<EventMessage<TestEvent>>(); var handlerModule = new TestHandlerModule(projectedEvents); using (var host = new DurableCommitDispatcher( new EventStoreClient(eventStore.Advanced), new InMemoryCheckpointRepository(), new HandlerResolver(handlerModule))) { var projectedCommits = host .ProjectedCommits .Replay(); using(projectedCommits.Connect()) { await host.Start(); var streamId = Guid.NewGuid().ToString().FormatStreamIdWithBucket(); Guid commitId = Guid.NewGuid(); Task<ICommit> commitProjected = projectedCommits .Take(1) .ToTask(); using(IEventStream stream = eventStore.CreateStream(streamId)) { stream.Add(new global::NEventStore.EventMessage { Body = new TestEventThatThrows() }); stream.CommitChanges(commitId); } host.PollNow(); Func<Task> act = async () => await commitProjected; act.ShouldThrow<Exception>(); } } } }