public async Task Consume(ConsumeContext <PlaceOrder> context) { Console.WriteLine($"Message received: {JsonSerializer.Serialize(context.Message)}"); var orderNumber = await _orderNumberGenerator.GetNumber(context.Message.UserId); var order = new Order { Id = context.Message.Id, Number = orderNumber, ProductIds = string.Join(",", context.Message.ProductIds), ShippingTypeId = context.Message.ShippingTypeId, UserId = context.Message.UserId, TimeStamp = DateTime.UtcNow, Amount = _costCalculator.CostForProducts(context.Message.ProductIds) }; await _ordersRepository.Add(order); await _dbContext.SaveChangesAsync(); //Some expensive calculation Thread.Sleep(10000); await _eventBus.Publish(new OrderCreated { OrderId = order.Id, Number = order.Number, ProductIds = order.ProductIds.Split(","), ShippingTypeId = order.ShippingTypeId, UserId = order.UserId, TimeStamp = order.TimeStamp, Amount = order.Amount }); await _commandBus.Send(new CreateShipping { OrderId = order.Id, UserId = order.UserId, ShippingTypeId = order.ShippingTypeId }); }