Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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}");
            }
        }