Esempio n. 1
0
 private async Task ProcessEvent(string eventName, string message)
 {
     if (_subManager.HasSubscriptionForEvent(eventName))
     {
         using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME))
         {
             var subscriptions = _subManager.GetSubscriptionsForEvent(eventName);
             foreach (var subscription in subscriptions)
             {
                 if (subscription.IsDynamic)
                 {
                     var     handler   = scope.ResolveOptional(subscription.HandlerType) as IDynamicEventHandler;
                     dynamic eventData = JObject.Parse(message);
                     await handler.Handle(eventData);
                 }
                 else
                 {
                     var eventType        = _subManager.GetEventType(eventName);
                     var integrationEvent = JsonConvert.DeserializeObject(message, eventType);
                     var handler          = scope.ResolveOptional(subscription.HandlerType);
                     var concreteHandler  = typeof(IEventHandler <>).MakeGenericType(eventType);
                     await(Task) concreteHandler.GetMethod("Handle").Invoke(handler, new object[] { integrationEvent });
                 }
             }
         }
     }
     throw new NotImplementedException();
 }
Esempio n. 2
0
        private void Message_Received(object sender, BasicDeliverEventArgs e)
        {
            _logger.LogInformation(" [x] Message received: {0} to queue {1}.",
                                   e.RoutingKey, _queueName);

            var isSubscribedToEvent = _subsManager.HasSubscription(e.RoutingKey);

            //Bir string var, bu stringe göre bir class'ın bir methodunu çağırmak istiyoruz.
            var body    = e.Body.ToArray();
            var message = Encoding.UTF8.GetString(body);

            _logger.LogInformation(" \t [.] Content of most recently message: {0}",
                                   message);

            var integrationEvent =
                JsonConvert.DeserializeObject(message, _subsManager.GetEventType(e.RoutingKey));

            _logger.LogInformation(" [x] Deserialized integrationEvent: {0}", integrationEvent);

            Type type = _subsManager.GetHandlerType(e.RoutingKey);

            var scope = _autofac.BeginLifetimeScope();

            _logger.LogInformation(" [x] Scope: {0}", scope.GetType());
            var handler = scope.ResolveOptional(type);

            _logger.LogInformation(" [x] Handler: {0}", handler.GetType());
            type.GetMethod("Handle").Invoke(handler, new object[] { integrationEvent });


            //var concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(type);
        }
Esempio n. 3
0
        public async Task <bool> Process(BasicDeliverEventArgs eventMessage)
        {
            var eventName = eventMessage.RoutingKey;

            if (!_eventBusSubscriptionManager.HasSubscribedEvent(eventName))
            {
                _logger.LogWarning($"Event '{eventName}' cannot be processed because it is not subscribed");
                return(false);
            }

            var eventType = _eventBusSubscriptionManager.GetEventType(eventName);
            var eventBody = Encoding.UTF8.GetString(eventMessage.Body.ToArray());
            var @event    = JsonConvert.DeserializeObject(eventBody, eventType);

            using (var scope = _lifetimeScope.BeginLifetimeScope())
            {
                var handlerType  = typeof(IIntegrationEventHandler <>).MakeGenericType(eventType);
                var eventHandler = scope.Resolve(handlerType);

                await(Task) handlerType.GetMethod("Handle")?.Invoke(eventHandler, new[] { @event });
            }

            return(true);
        }