public Task PublishToQueueAsync(KitchenArea kitchenArea, ProductQueueDto productQueue) { if (connection.IsOpen) { using (var channel = connection.CreateModel()) { channel.ConfirmSelect(); var queue = channel.QueueDeclare(queue: kitchenArea.Name + " - waiting", durable: false, exclusive: false, autoDelete: false, arguments: null); string message = JsonConvert.SerializeObject(productQueue); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: kitchenArea.Name + " - waiting", basicProperties: null, body: body); channel.WaitForConfirmsOrDie(new TimeSpan(0, 0, 1)); return(Task.CompletedTask); } } return(Task.FromCanceled(_stoppingCts.Token)); }
public async Task <IActionResult> PlaceOrder([FromBody] OrderDto orderDto) { try { var order = service.Create(orderDto); var addOrder = await service.Add(order); if (!addOrder) { return(BadRequest()); } var count = 0; foreach (var item in orderDto.ProductOrder) { var result = await _productService.GetById(item.ProductId); if (result != null && result.Value.Price == item.Price) { var kitchenQueue = await _kitchenAreaService.GetById(result.Value.KitchenAreaId); if (!kitchenQueue) { return(StatusCode(kitchenQueue.StatusCode, ErrorDto.Create(kitchenQueue.StatusCode, kitchenQueue.Error))); } Console.WriteLine(kitchenQueue.Value.Name); var getOrder = await service.GetOrderByCreatedDate(order.CreatedAt); if (!getOrder) { return(StatusCode(getOrder.StatusCode, ErrorDto.Create(getOrder.StatusCode, getOrder.Error))); } var productQueue = ProductQueueDto.CreateProductQueueDto(getOrder.Value, result.Value, kitchenQueue.Value, count); var publisher = _rabbitMQService.PublishToQueueAsync(kitchenQueue.Value, productQueue).ConfigureAwait(true); if (!publisher.GetAwaiter().IsCompleted) { return(BadRequest()); } } count++; } return(Ok(order)); } catch (Exception ex) { return(StatusCode(500, ErrorDto.Create(500, "Internal server error: " + ex.Message))); } }