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; } }
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; } }