private async Task ProcessAsync(Message message) { if (message == null) { return; } var data = Encoding.UTF8.GetString(message.Body); if (string.IsNullOrWhiteSpace(data)) { return; } var eventName = $"{message.Label}{IntegrationEventSuffix}"; if (!_subscriptions.HasSubscribers(eventName)) { return; } using (var scope = _serviceProvider.CreateScope()) { var subscribers = _subscriptions.GetSubscribers(eventName); foreach (var subscriber in subscribers) { if (subscriber.IsDynamic) { if (scope.ServiceProvider.GetService(subscriber.HandlerType) is IDynamicIntegrationEventHandler handler) { dynamic eventData = JObject.Parse(data); await handler.Handle(eventData).ConfigureAwait(false); } } else { var eventType = _subscriptions.GetEventType(eventName); var integrationEvent = JsonConvert.DeserializeObject(data, eventType); var handler = scope.ServiceProvider.GetService(subscriber.HandlerType); if (handler != null) { var concreteType = typeof(IIntegrationEventHandler <>).MakeGenericType(eventType); await(Task) concreteType.GetMethod("Handle") .Invoke(handler, new object[] { integrationEvent }); } } } } // Complete the message so that it is not received again. await _subscriptionClient.CompleteAsync(message.SystemProperties.LockToken); }
public async Task DispatchAsync(Message message) { if (message == null) { return; } if (!_subscriptions.HasSubscribers(message.Label)) { return; } if (_subscriptions.IsDynamic(message.Label)) { await HandleDynamicTypeIntegrationEvent(message); } else { await HandleFixedTypeIntegrationEvent(message); } }