private void HandleMessage(TenderMessageDTO message, string routingKey) { using (var scope = _service.CreateScope()) { ITenderService tenderService = scope.ServiceProvider.GetRequiredService <ITenderService>(); Tender tender = tenderService.GetTenderByRoutingKey(routingKey); if (tender.IsClosed || tender.EndDate.CompareTo(DateTime.Now) <= 0) { throw new Exception("Tender is closed!"); } TenderMessage tenderMessage = new TenderMessage(); tenderMessage.Identification = message.Identification; tenderMessage.ReplyRoutingKey = message.ReplyRoutingKey; tenderMessage.TenderId = tender.Id; tenderMessage.Offers = new List <TenderOffer>(); foreach (var o in message.Offers) { TenderOffer to = new TenderOffer() { Code = o.Code, Name = o.Name, Quantity = o.Quantity, Price = o.Price }; tenderMessage.Offers.Add(to); } scope.ServiceProvider.GetRequiredService <ITenderMessageService>().CreateTenderMessage(tenderMessage); } }
private void OnConsumerReceived(object sender, BasicDeliverEventArgs e) { Byte[] body = null; string messageJson = null; TenderMessageDTO message = null; string routingKey = null; try { body = e.Body.ToArray(); messageJson = Encoding.UTF8.GetString(body); message = JsonConvert.DeserializeObject <TenderMessageDTO>(messageJson); routingKey = e.RoutingKey; HandleMessage(message, routingKey); _channel.BasicAck(e.DeliveryTag, false); } catch (Exception ex) { Console.WriteLine(ex.Message); _channel.BasicReject(e.DeliveryTag, false); } }