Пример #1
0
        private async Task ProcessEvent(string eventName, string message)
        {
            logger.LogTrace($"Processing RabbitMQ event: {eventName}");

            if (subscriptionManager.HasSubscritptionsForEvent(eventName))
            {
                using (var scope = autofac.BeginLifetimeScope())
                {
                    var subscriptions = subscriptionManager.GetHandlersForEvent(eventName);
                    foreach (var subscription in subscriptions)
                    {
                        var handler = scope.ResolveOptional(subscription.HandlerType);
                        if (handler == null)
                        {
                            continue;
                        }
                        var eventType           = subscriptionManager.GetEventTypeByName(eventName);
                        var integrationEvent    = JsonConvert.DeserializeObject(message, eventType);
                        var concreteHandlerType = typeof(IIntegrationEventHandler <>).MakeGenericType(eventType);

                        // TODO: ????
                        await Task.Yield();

                        await(Task) concreteHandlerType.GetMethod("Handle")
                        .Invoke(handler, new object[] { integrationEvent });
                    }
                }
            }
            else
            {
                logger.LogWarning($"No subscription for event : {eventName}");
            }
        }