private void ConsumerOnReceived(object sender, BasicDeliverEventArgs basicDeliverEventArgs) { if (sender is EventingBasicConsumer consumer) { consumer.Received -= ConsumerOnReceived; } if (_responseActions.TryRemove(basicDeliverEventArgs.BasicProperties.CorrelationId, out ResponseAction responseAction)) { Logger.LogInformation($"Response received for message {basicDeliverEventArgs.BasicProperties.CorrelationId}"); IMessage message; bool success = Enum.TryParse(basicDeliverEventArgs.BasicProperties.ContentEncoding, true, out SerializationType serializationType); if (success) { message = DeserializeMessage(basicDeliverEventArgs.Body, responseAction.ExpectedResponse, serializationType); } else { Logger.LogError($"Cannot deserialize object type { responseAction.ExpectedResponse} serialize in {basicDeliverEventArgs.BasicProperties.ContentEncoding}"); return; } responseAction.OnSuccess(message, RabbitMqConnection.CreateMetadata(basicDeliverEventArgs.BasicProperties, basicDeliverEventArgs.RoutingKey, Serializers[SerializationType.Binary], basicDeliverEventArgs.DeliveryTag)); } }
private void EventingBasicConsumerOnReceived(object sender, BasicDeliverEventArgs args) { try { string typeString = args.BasicProperties.Type; Type type = null; if (!string.IsNullOrWhiteSpace(typeString)) { type = Type.GetType(typeString, false); } if (type == null) { throw new TypeLoadException($"Unknown type {typeString}. Failed to properly consume message."); } IMessage message; bool success = Enum.TryParse(args.BasicProperties.ContentEncoding, true, out SerializationType serializationType); if (success) { message = DeserializeMessage(args.Body, type, serializationType); } else { Logger.LogError( $"Cannot deserialize object type {type.Name} serialize in {args.BasicProperties.ContentEncoding}"); return; } foreach (var call in _registerMethodDictionary[type]) { Task.Factory.StartNew(() => call(message, RabbitMqConnection.CreateMetadata(args.BasicProperties, args.RoutingKey, Serializers[SerializationType.Binary], args.DeliveryTag))); } } catch (Exception e) { Logger.LogError(e, $"Message reception error for {args.BasicProperties.Type}"); } }