private void SetupRabbitConsumer() { var factory = new ConnectionFactory { HostName = Configuration["RabbitMq:HostName"].Default("localhost"), Port = Configuration["RabbitMq:Port"].ToInt(5672), UserName = Configuration["RabbitMq:UserName"].Default("guest"), Password = Configuration["RabbitMq:Password"].Default("guest") }; var connection = factory.CreateConnection(); var channel = connection.CreateModel(); channel.ExchangeDeclare(exchange: "moorea", type: "direct"); var queueName = channel.QueueDeclare().QueueName; channel.QueueBind(queue: queueName, exchange: "moorea", routingKey: "moorea-messages"); channel.QueueBind(queue: queueName, exchange: "moorea", routingKey: "moorea-actions"); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { try { var dbOptions = new DbContextOptionsBuilder <DatabaseContext>().UseSqlServer(Configuration["Data:ConnectionString"]).Options; using (var dbContext = new DatabaseContext(dbOptions)) { var body = ea.Body; var message = Encoding.UTF8.GetString(body); if (message.StartsWith("{")) { var action = JsonConvert.DeserializeObject <IMessageQueueBaseAction>(message); Console.WriteLine("{0} received action: {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm.ss"), action.Action); var sw = new Stopwatch(); sw.Start(); if (ActionExecuter.Execute(dbContext, action)) { channel.BasicAck(ea.DeliveryTag, false); } sw.Stop(); Console.WriteLine($" tempo di esecuzione: {sw.ElapsedMilliseconds} ms"); } else { Console.WriteLine("- received message: {0}", message); channel.BasicAck(ea.DeliveryTag, false); } } } catch (Exception e) { Console.WriteLine("errore in gestione messaggio: {0}", e.Message); } }; channel.BasicConsume(queueName, false, consumer); }