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(); }
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); }
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); }