public async Task Handler(INetConnection client, string messageWrapperContent) { Console.WriteLine("Receive: " + messageWrapperContent); var messageWrapper = MessageWrapper.Parse(messageWrapperContent); if (messageWrapper != null) { var content = messageWrapper.Content; var eventName = content.GetType().Name; if (_subsManager.HasSubscriptionsForEvent(eventName)) { using (var scope = _autofac.BeginLifetimeScope(AUTOFAC_SCOPE_NAME)) { var subscriptions = _subsManager.GetHandlersForEvent(eventName); foreach (var subscription in subscriptions) { if (subscription.IsDynamic) { var handler = scope.ResolveOptional(subscription.HandlerType) as IDynamicMessageHandler; if (handler == null) { continue; } await Task.Yield(); await handler.Handle(client, content); } else { var handler = scope.ResolveOptional(subscription.HandlerType); if (handler == null) { continue; } var eventType = _subsManager.GetEventTypeByName(eventName); var integrationEvent = content; var concreteType = typeof(IMessageHandler <>).MakeGenericType(eventType); await Task.Yield(); await(Task) concreteType.GetMethod("Handle").Invoke(handler, new object[] { client, integrationEvent }); } } } } else { _logger.LogWarning("No subscription for RabbitMQ event: {EventName}", eventName); } } }
/// <summary> /// 将消息添加到位于消息池中【接收到的消息队列】的结尾处。 /// </summary> public override void EnqueueReceiving(string message) { message = message.Trim(); if (!string.IsNullOrEmpty(message)) { lock (_ReceiveLock) { _ReceivingQueue.Enqueue(message); } MessageWrapper wrapp = MessageWrapper.Parse(message, MessageSource.AsyncReceiving); OnReceivingMessageArrival(wrapp); } }