Beispiel #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="eventSerialized"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public Task ExecuteDomainSubscribers(string eventSerialized, CancellationToken cancellationToken)
        {
            var eventDeserialized = _deserializer.Deserialize(eventSerialized);

            return(Task.WhenAll(
                       DomainEventSubscriberInformationService
                       .GetAllEventsSubscribers(eventDeserialized)
                       .Select(subscriber =>
                               ExecuteDomainSubscriber(eventSerialized, eventDeserialized, subscriber, cancellationToken))));
        }
        public void Consume(DomainEvent @event)
        {
            var subscribers = DomainEventSubscriberInformationService.GetAllEventsSubscribers(@event);

            foreach (var subscriber in subscribers)
            {
                _domainEventsToExecute.Subscribers.Add(cancellationToken =>
                                                       _domainEventMediator.ExecuteOn(@event, subscriber, cancellationToken));
            }
            //return Task.WhenAll(subscribers.Select(subscriber =>
            //    _domainEventMediator.ExecuteOn(@event, subscriber, cancellationToken)));
        }
Beispiel #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="stoppingToken"></param>
        /// <returns></returns>
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            using var initialScope = _serviceScopeFactory.CreateScope();

            var domainEventJsonDeserializer = initialScope.ServiceProvider.GetRequiredService <DomainEventJsonDeserializer>();

            var domainEventMediator = initialScope.ServiceProvider.GetRequiredService <DomainEventMediator>();

            var redisSubscriber = initialScope.ServiceProvider.GetRequiredService <IConnectionMultiplexer>().GetSubscriber();

            await redisSubscriber.SubscribeAsync("*", async (_, value) =>
            {
                var @event = domainEventJsonDeserializer.Deserialize(value);

                var subscribers = DomainEventSubscriberInformationService.GetAllEventsSubscribers(@event);

                await Task.WhenAll(subscribers.Select(subscriber =>
                                                      domainEventMediator.ExecuteOn(@event, subscriber, stoppingToken)));
            });
        }
Beispiel #4
0
 /// <summary>
 ///
 /// </summary>
 /// <returns></returns>
 public Task Consume()
 {
     DomainEventSubscriberInformationService.GetAllEventsSubscribers().ForEach(eventSubscriber => ConsumeMessages(eventSubscriber));
     return(Task.CompletedTask);
 }