private void OnMessageReceived(object sender, DLB.EventBus.Transport.Messages.TransportMessage e) { var handler = _subscribers.FirstOrDefault(p => p.Topic == e.Topic); string jsonStr = Encoding.UTF8.GetString(e.Body); if (!string.IsNullOrEmpty(jsonStr)) { // Message received context var context = new HandleContext(_consumerClient, e.Headers); var method = handler.GetType().GetMethod(HandleAsyncMethod); // Get only dynamic parameter, type of IntegrationEventData var type = method.GetParameters().FirstOrDefault().ParameterType; var data = JsonConvert.DeserializeObject(jsonStr, type); object[] parametersArray = new object[] { data, context, this }; method.Invoke(handler, parametersArray); } }
private async Task OnMessageReceivedAsync(object sender, DLB.EventBus.Transport.Messages.TransportMessage e) { using (var scope = _serviceScopeFactory.CreateScope()) { var subscribers = scope.ServiceProvider.GetService <IEnumerable <ISubscriber> >(); string jsonStr = Encoding.UTF8.GetString(e.Body); var handlerList = subscribers.Where(p => p.Topic == e.Topic); if (!string.IsNullOrEmpty(jsonStr) && handlerList != null && handlerList.Any()) { // Message received context var context = new HandleContext(_consumerClient, e); foreach (var handler in handlerList) { // Get only dynamic parameter, type of IntegrationEventData var method = handler.GetType().GetMethod(HandleAsyncMethod); var type = method.GetParameters().FirstOrDefault().ParameterType; var headerType = e.Headers[Messages.Headers.Type]; if (headerType == type.Name) { // If no throw exception we found a valid handler var data = JsonConvert.DeserializeObject(jsonStr, type, this._options.JsonSerializerSettings); object[] parametersArray = new object[] { data, context, this }; var task = (Task)method.Invoke(handler, parametersArray); await task.ConfigureAwait(false); break; } } } } }