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