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(); }