コード例 #1
0
        /// <summary>
        /// Helper event handler.
        /// </summary>
        private void ResponseReady(object sender, BasicDeliverEventArgs e)
        {
            try
            {
                // Check if correlation Id is valid.
                if (correlationIds.Contains(e.BasicProperties.CorrelationId))
                {
                    lock (correlationIds)
                    {
                        correlationIds.Remove(e.BasicProperties.CorrelationId);
                    }

                    // Converting from Json bytes.
                    var convertedMessage = MessageQueueCommonItems.DeserializeFromJsonBytes <TResponse>(e.Body);

                    // Calling handler.
                    OnResponseReady?.Invoke(convertedMessage);
                }
            }
            catch (QueueException queueException)
            {
                #region Logging - Error
                logger.Fatal(queueException, queueException.Message);
                #endregion
            }
            catch (Exception ex)
            {
                #region Adding Context Data
                var context = new Dictionary <string, string>();

                if (!string.IsNullOrEmpty(rabbitMqConfiguration.ExchangeName))
                {
                    context.Add(CommonContextKeys.ExchangeName, rabbitMqConfiguration.ExchangeName);
                }

                if (!string.IsNullOrEmpty(routingKey))
                {
                    context.Add(CommonContextKeys.RoutingKey, routingKey);
                }

                if (!string.IsNullOrEmpty(replyQueueName))
                {
                    context.Add(CommonContextKeys.ReplyQueueName, replyQueueName);
                }
                #endregion

                MessageQueueCommonItems.PrepareAndLogQueueException(
                    errorCode: QueueErrorCode.FailedToReceiveResponseMessage,
                    message: ErrorMessages.FailedToReceiveResponseMessage,
                    innerException: ex,
                    queueContext: CommonItems.RabbitMqName,
                    queueName: rabbitMqConfiguration.QueueName,
                    address: rabbitMqConfiguration.Address,
                    context: context,
                    logger: logger);
            }
        }
コード例 #2
0
        /// <summary>
        /// Helper event handler.
        /// </summary>
        private void ReceiveReady(object sender, BasicDeliverEventArgs request)
        {
            try
            {
                // Converting from Json bytes.
                var convertedMessage = MessageQueueCommonItems.DeserializeFromJsonBytes <TRequest>(request.Body);

                // Getting other required fields for response.
                var replyProperties = model.CreateBasicProperties();
                replyProperties.CorrelationId = request.BasicProperties.CorrelationId;

                // Calling handler.
                OnRequestReady?.Invoke(new RmqRequestMessage <TRequest, TResponse>(
                                           model,
                                           replyProperties,
                                           rabbitMqConfiguration.ExchangeName ?? string.Empty,
                                           request.BasicProperties.ReplyTo,
                                           rabbitMqConfiguration.Acknowledgment,
                                           request.DeliveryTag,
                                           convertedMessage,
                                           ref logger));
            }
            catch (QueueException queueException)
            {
                #region Logging - Error
                logger.Fatal(queueException, queueException.Message);
                #endregion
            }
            catch (Exception ex)
            {
                #region Adding Context Data
                var context = new Dictionary <string, string>();

                if (!string.IsNullOrEmpty(rabbitMqConfiguration.ExchangeName))
                {
                    context.Add(CommonContextKeys.ExchangeName, rabbitMqConfiguration.ExchangeName);
                }

                if (!string.IsNullOrEmpty(rabbitMqConfiguration.RoutingKey))
                {
                    context.Add(CommonContextKeys.RoutingKey, rabbitMqConfiguration.RoutingKey);
                }
                #endregion

                MessageQueueCommonItems.PrepareAndLogQueueException(
                    errorCode: QueueErrorCode.FailedToReceiveRequestMessage,
                    message: ErrorMessages.FailedToReceiveRequestMessage,
                    innerException: ex,
                    queueContext: CommonItems.RabbitMqName,
                    queueName: rabbitMqConfiguration.QueueName,
                    address: rabbitMqConfiguration.Address,
                    context: context,
                    logger: logger);
            }
        }
コード例 #3
0
        /// <summary>
        /// Helper event handler.
        /// </summary>
        private async void ReceiveReady(object sender, BasicDeliverEventArgs e)
        {
            try
            {
                // Converting from Json bytes.
                var convertedMessage      = MessageQueueCommonItems.DeserializeFromJsonBytes <TMessage>(e.Body);
                var messageReceiveOptions = new RmqMessageReceiveOptions(model, e.DeliveryTag, rabbitMqConfiguration.QueueName, rabbitMqConfiguration.Acknowledgment, ref logger);

                // Calling handler (async is preferred over sync).
                if (OnMessageReadyAsync != null)
                {
                    await OnMessageReadyAsync.Invoke(convertedMessage, messageReceiveOptions);
                }
                else
                {
                    OnMessageReady?.Invoke(convertedMessage, messageReceiveOptions);
                }
            }
            catch (QueueException queueException)
            {
                #region Logging - Error
                logger.Fatal(queueException, queueException.Message);
                #endregion
            }
            catch (Exception ex)
            {
                #region Adding Context Data
                var context = new Dictionary <string, string>();

                if (!string.IsNullOrEmpty(rabbitMqConfiguration.ExchangeName))
                {
                    context.Add(CommonContextKeys.ExchangeName, rabbitMqConfiguration.ExchangeName);
                }

                if (!string.IsNullOrEmpty(rabbitMqConfiguration.RoutingKey))
                {
                    context.Add(CommonContextKeys.RoutingKey, rabbitMqConfiguration.RoutingKey);
                }
                #endregion

                MessageQueueCommonItems.PrepareAndLogQueueException(
                    errorCode: QueueErrorCode.FailedToReceiveMessage,
                    message: ErrorMessages.FailedToReceiveMessage,
                    innerException: ex,
                    queueContext: CommonItems.RabbitMqName,
                    queueName: rabbitMqConfiguration.QueueName,
                    address: rabbitMqConfiguration.Address,
                    context: context,
                    logger: logger);
            }
        }