private static void AddEventAndReadModelSubscriptions(IServiceCollection services, IEnumerable <Assembly> readModelAndDomainEventAssemblies) { var iHandleAsyncEvents = new List <EventSchema>(); var modelAndDomainEventAssemblies = readModelAndDomainEventAssemblies.ToList(); foreach (var assembly in modelAndDomainEventAssemblies) { var eventsForPublish = GetEventsForIHandleAsyncs(assembly); var eventsForPublish2 = GetEventsForQuerys(assembly); var notAddedYet = eventsForPublish.Where(e => !iHandleAsyncEvents.Contains(e)); iHandleAsyncEvents.AddRange(notAddedYet); var notAddedYet2 = eventsForPublish2.Where(e => !iHandleAsyncEvents.Contains(e)); iHandleAsyncEvents.AddRange(notAddedYet2); } var readModelSubscriptions = new List <ReadModelSubscription>(); foreach (var assembly in modelAndDomainEventAssemblies) { var eventsForPublish = GetEventsForReadModelSubscribe(assembly); var notAddedYet = eventsForPublish.Where(e => !readModelSubscriptions.Contains(e)); readModelSubscriptions.AddRange(notAddedYet); } var subscribedEventCollection = new EventsSubscribedByService(iHandleAsyncEvents, readModelSubscriptions); services.AddSingleton(subscribedEventCollection); }
public async Task StatusLoadAndSafe_OneUnresolvedReadModel(PersistenceLayerProvider layerProvider) { var statusRepository = layerProvider.StatusRepository; List <EventsPublishedByService> services = new List <EventsPublishedByService> { EventsPublishedByService.Reachable(new ServiceEndPoint(new Uri("http://service1.de"), "Name1"), new [] { new EventSchema("Event1"), new EventSchema("Event2") }) }; var subscribedEventCollection = new EventsSubscribedByService( new [] { new EventSchema("Event1"), new EventSchema("Event2") }, new [] { new ReadModelSubscription("Rm1", new EventSchema("Event3")) }); var eventLocation = new EventLocation(services, subscribedEventCollection); await statusRepository.SaveEventLocation(eventLocation); await statusRepository.SaveEventLocation(eventLocation); var location = await statusRepository.GetEventLocation(); Assert.AreEqual("Rm1", location.UnresolvedReadModeSubscriptions.Single().ReadModelName); Assert.AreEqual("Event3", location.UnresolvedReadModeSubscriptions.Single().GetsCreatedOn.Name); Assert.IsTrue(!location.UnresolvedEventSubscriptions.Any()); }
public async Task StatusLoadAndSafe_HappyPath(PersistenceLayerProvider layerProvider) { var statusRepository = layerProvider.StatusRepository; List <EventsPublishedByService> services = new List <EventsPublishedByService> { EventsPublishedByService.Reachable(new ServiceEndPoint(new Uri("http://service1.de"), "Name1"), new [] { new EventSchema("Event1"), new EventSchema("Event2"), new EventSchema("Event3") }) }; var subscribedEventCollection = new EventsSubscribedByService( new [] { new EventSchema("Event1"), new EventSchema("Event2") }, new [] { new ReadModelSubscription("Rm1", new EventSchema("Event3")) }); var eventLocation = new EventLocation(services, subscribedEventCollection); await statusRepository.SaveEventLocation(eventLocation); var location = await statusRepository.GetEventLocation(); var microwaveServiceNodes = location.Services.ToList(); Assert.IsNotNull(microwaveServiceNodes); Assert.AreEqual(1, microwaveServiceNodes.Count); Assert.AreEqual(2, microwaveServiceNodes[0].SubscribedEvents.Count()); Assert.AreEqual(1, microwaveServiceNodes[0].ReadModels.Count()); Assert.IsTrue(!location.UnresolvedEventSubscriptions.Any()); Assert.IsTrue(!location.UnresolvedReadModeSubscriptions.Any()); }
public DiscoveryHandler( ServiceBaseAddressCollection serviceBaseAddressCollection, EventsSubscribedByService eventsSubscribedByService, EventsPublishedByService eventsPublishedByService, IServiceDiscoveryRepository discoveryRepository, IStatusRepository statusRepository, DiscoveryConfiguration configuration) { _serviceBaseAddressCollection = serviceBaseAddressCollection; _eventsSubscribedByService = eventsSubscribedByService; _eventsPublishedByService = eventsPublishedByService; _discoveryRepository = discoveryRepository; _statusRepository = statusRepository; _configuration = configuration; }