Пример #1
0
        protected async Task ProcessMessageAsync(Message message, CancellationToken token)
        {
            var messageBody = Encoding.UTF8.GetString(message.Body);
            OrderPaymentRequestMessage item = JsonConvert.DeserializeObject <OrderPaymentRequestMessage>(messageBody);

            await this.queueClient.CompleteAsync(message.SystemProperties.LockToken);

            logger.LogDebug($"{item.OrderId} | ServiceBusListener received item.");

            // Take a while - renewing lock fails despite message being completed
            // Exception does not stop execution of this message handler
            await Task.Delay(25000);

            logger.LogDebug($"{item.OrderId} | ServiceBusListener processed item.");
        }
        private async Task OnCheckoutMessageReceived(Message message, CancellationToken arg2)
        {
            using var scope = logger.BeginScope("Processing message for trace {TraceId}", message.CorrelationId);

            var body = Encoding.UTF8.GetString(message.Body);//json from service bus

            //save order with status not paid
            BasketCheckoutMessage basketCheckoutMessage = JsonConvert.DeserializeObject <BasketCheckoutMessage>(body);

            Guid orderId = Guid.NewGuid();

            Order order = new Order
            {
                UserId      = basketCheckoutMessage.UserId,
                Id          = orderId,
                OrderPaid   = false,
                OrderPlaced = DateTime.Now,
                OrderTotal  = basketCheckoutMessage.BasketTotal
            };

            await _orderRepository.AddOrder(order);

            logger.LogDebug("Created order {OrderId} for user {UserId}", orderId, basketCheckoutMessage.UserId);

            //send order payment request message
            OrderPaymentRequestMessage orderPaymentRequestMessage = new OrderPaymentRequestMessage
            {
                CardExpiration = basketCheckoutMessage.CardExpiration,
                CardName       = basketCheckoutMessage.CardName,
                CardNumber     = basketCheckoutMessage.CardNumber,
                OrderId        = orderId,
                Total          = basketCheckoutMessage.BasketTotal
            };

            try
            {
                await _messageBus.PublishMessage(orderPaymentRequestMessage, orderPaymentRequestMessageTopic, message.CorrelationId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Пример #3
0
        protected async Task ProcessMessageAsync(Message message, CancellationToken token)
        {
            using var scope = logger.BeginScope("Processing message for trace {TraceId}", message.CorrelationId);

            var messageBody = Encoding.UTF8.GetString(message.Body);
            OrderPaymentRequestMessage orderPaymentRequestMessage = JsonConvert.DeserializeObject <OrderPaymentRequestMessage>(messageBody);

            PaymentInfo paymentInfo = new PaymentInfo
            {
                CardNumber     = orderPaymentRequestMessage.CardNumber,
                CardName       = orderPaymentRequestMessage.CardName,
                CardExpiration = orderPaymentRequestMessage.CardExpiration,
                Total          = orderPaymentRequestMessage.Total
            };

            var result = await externalGatewayPaymentService.PerformPayment(paymentInfo);

            await subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);

            //send payment result to order service via service bus
            OrderPaymentUpdateMessage orderPaymentUpdateMessage = new OrderPaymentUpdateMessage
            {
                PaymentSuccess = result,
                OrderId        = orderPaymentRequestMessage.OrderId
            };

            try
            {
                await messageBus.PublishMessage(orderPaymentUpdateMessage, orderPaymentUpdatedMessageTopic, message.CorrelationId);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            logger.LogDebug($"{orderPaymentRequestMessage.OrderId}: ServiceBusListener received item.");
            await Task.Delay(20000);

            logger.LogDebug($"{orderPaymentRequestMessage.OrderId}:  ServiceBusListener processed item.");
        }
        private async Task <bool> ProcessAsync(string body)
        {
            //save order with status not paid
            BasketCheckoutMessage basketCheckoutMessage = JsonConvert.DeserializeObject <BasketCheckoutMessage>(body);

            Guid orderId = Guid.NewGuid();

            Order order = new Order
            {
                UserId      = basketCheckoutMessage.UserId,
                Id          = orderId,
                OrderPaid   = false,
                OrderPlaced = DateTime.Now,
                OrderTotal  = basketCheckoutMessage.BasketTotal
            };

            await orderRepository.AddOrder(order);

            //send order payment request message
            OrderPaymentRequestMessage orderPaymentRequestMessage = new OrderPaymentRequestMessage
            {
                CardExpiration = basketCheckoutMessage.CardExpiration,
                CardName       = basketCheckoutMessage.CardName,
                CardNumber     = basketCheckoutMessage.CardNumber,
                OrderId        = orderId,
                Total          = basketCheckoutMessage.BasketTotal
            };

            try
            {
                await messageBus.PublishMessage(orderPaymentRequestMessage, orderPaymentRequestMessageQueue);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            return(true);
        }
        public override async Task <bool> ProcessAsync(string messageBody)
        {
            OrderPaymentRequestMessage orderPaymentRequestMessage = JsonConvert.DeserializeObject <OrderPaymentRequestMessage>(messageBody);

            PaymentInfo paymentInfo = new PaymentInfo
            {
                CardNumber     = orderPaymentRequestMessage.CardNumber,
                CardName       = orderPaymentRequestMessage.CardName,
                CardExpiration = orderPaymentRequestMessage.CardExpiration,
                Total          = orderPaymentRequestMessage.Total
            };

            var result = await externalGatewayPaymentService.PerformPayment(paymentInfo);

            //send payment result to order service via service bus
            OrderPaymentUpdateMessage orderPaymentUpdateMessage = new OrderPaymentUpdateMessage
            {
                PaymentSuccess = result,
                OrderId        = orderPaymentRequestMessage.OrderId
            };

            try
            {
                await messageBus.PublishMessage(orderPaymentUpdateMessage, _publishToQueueName);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }

            _logger.LogDebug($"{orderPaymentRequestMessage.OrderId}: ServiceBusListener received item.");
            _logger.LogDebug($"{orderPaymentRequestMessage.OrderId}:  ServiceBusListener processed item.");

            return(result);
        }
        private async Task OnCheckoutMessageReceived(ProcessMessageEventArgs args)
        {
            var messageBody           = Encoding.UTF8.GetString(args.Message.Body);
            var basketCheckoutMessage = JsonConvert.DeserializeObject <BasketCheckoutMessageDto>(messageBody);

            await using var _orderDbContext = new OrderDbContext(_options);
            var existingCustomer = await _orderDbContext.Customers.FindAsync(basketCheckoutMessage.UserId);

            if (existingCustomer == null)
            {
                var newCustomer = new Customer
                {
                    Id        = basketCheckoutMessage.UserId,
                    FirstName = basketCheckoutMessage.FirstName,
                    LastName  = basketCheckoutMessage.LastName,
                    Email     = basketCheckoutMessage.Email,
                    Address   = basketCheckoutMessage.Address,
                    ZipCode   = basketCheckoutMessage.ZipCode,
                    City      = basketCheckoutMessage.City,
                    Country   = basketCheckoutMessage.Country
                };

                await _orderDbContext.Customers.AddAsync(newCustomer);
            }

            Guid orderId = Guid.NewGuid();

            var order = new Order
            {
                UserId      = basketCheckoutMessage.UserId,
                Id          = orderId,
                OrderPaid   = false,
                OrderPlaced = DateTime.Now,
                OrderTotal  = basketCheckoutMessage.BasketTotal
            };

            order.OrderLines = new List <OrderLine>();

            foreach (var bLine in basketCheckoutMessage.BasketLines)
            {
                var orderLine = new OrderLine
                {
                    Id           = Guid.NewGuid(),
                    Price        = bLine.Price,
                    TicketAmount = bLine.TicketAmount,
                    EventId      = bLine.EventId,
                    EventName    = bLine.EventName,
                    EventDate    = bLine.EventDate,
                    VenueName    = bLine.VenueName,
                    VenueCity    = bLine.VenueCity,
                    VenueCountry = bLine.VenueCountry
                };
                order.OrderLines.Add(orderLine);
            }

            await _orderDbContext.Orders.AddAsync(order);

            var orderPaymentRequestMessage = new OrderPaymentRequestMessage
            {
                CardExpiration = basketCheckoutMessage.CardExpiration,
                CardName       = basketCheckoutMessage.CardName,
                CardNumber     = basketCheckoutMessage.CardNumber,
                OrderId        = orderId,
                Total          = basketCheckoutMessage.BasketTotal
            };

            try
            {
                await _orderDbContext.SaveChangesAsync();

                await _messageBus.PublishMessage(orderPaymentRequestMessage, _orderPaymentRequestMessageTopic);

                await args.CompleteMessageAsync(args.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }