private void SubscribeForOrderStatusUpdate()
        {
            var connectionFactory = new ConnectionFactory()
            {
                UserName = _username,
                Password = _password,
                HostName = _hostname
            };

            var connection = connectionFactory.CreateConnection();
            var channel    = connection.CreateModel();
            var consumer   = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body);

                // 1. Get the message
                OrderStatusMessageDTO orderStatus = JsonConvert.DeserializeObject <OrderStatusMessageDTO>(message);

                // 2. Update order status
                _orderService.UpdateOrderStatusWithExternalId(orderStatus);
            };
            channel.BasicConsume(queue: _orderStatusQueueName, autoAck: true, consumer: consumer);
        }
        public void UpdateOrderStatusWithExternalId(OrderStatusMessageDTO orderStatus)
        {
            var existingOrder = _unitOfWork.OrderRepository.Get(item => item.Id == orderStatus.OrderId).FirstOrDefault();

            if (existingOrder != null)
            {
                existingOrder.StatusId        = Convert.ToInt32(orderStatus.OrderStatus);
                existingOrder.ExternalOrderId = orderStatus.RechargeOrderId;
                _unitOfWork.SaveChanges();
            }
        }
        private void PublishMessageForOrderStatus(OrderStatusMessageDTO message)
        {
            var connectionFactory = new ConnectionFactory()
            {
                UserName = _username,
                Password = _password,
                HostName = _hostname
            };

            using (var connection = connectionFactory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    var properties = channel.CreateBasicProperties();
                    properties.Persistent = false;

                    byte[] messagebuffer = Encoding.Default.GetBytes(JsonConvert.SerializeObject(message));

                    channel.BasicPublish(_exchangeName, _orderStatusRoutingKey, properties, messagebuffer);
                }
            }
        }