public bool Publish(string message)
        {
            if (!ConnectionExists())
            {
                return(false);
            }

            using (var channel = _connection.CreateModel())
            {
                var queue = channel.QueueDeclare(queue: _queueName, durable: false, exclusive: false, autoDelete: false, arguments: null);

                var team         = AvailableTeamsRepository.GetTeam();
                var teamCapacity = team.GetCapacity();

                if (queue.MessageCount == teamCapacity)
                {
                    return(false);
                }

                var body = Encoding.UTF8.GetBytes(message);
                channel.BasicPublish(exchange: "", routingKey: _queueName, basicProperties: null, body: body);
            }

            return(true);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Chat coordinator started");

            var team = AvailableTeamsRepository.GetTeam();
            var agentChatCoordinatorService = new AgentChatCoordinatorService(team.Agents, team.OverflowAgents);

            var factory = new ConnectionFactory
            {
                HostName = HostName
            };

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(QueueName, false, false, false, null);
                    Console.WriteLine("Waiting for messages...");

                    var consumer = new EventingBasicConsumer(channel);

                    consumer.Received += (model, eventArguments) =>
                    {
                        var message = Encoding.UTF8.GetString(eventArguments.Body.ToArray());

                        Console.WriteLine($"Assigning message {message} to an agent...");

                        var assignedAgent = agentChatCoordinatorService.AssignChat(message);

                        Console.WriteLine($"Message {message} assigned to {assignedAgent.Name}");
                    };

                    channel.BasicConsume(QueueName, true, consumer);
                }

            Console.WriteLine("Press [enter] to exit.");
            Console.ReadLine();
        }