string exchangeName = "exchange-tasktype"; var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.BasicQos(0, 1, true); channel.ExchangeDeclare(exchangeName, "direct"); var consumer = new QueueingBasicConsumer(channel); string[] supportedTasks = new string[] { "A", "B" }; foreach (string taskType in supportedTasks) { var queueName = "type-" + taskType; channel.QueueDeclare(queueName, false, false, false, null); channel.QueueBind(queueName, exchangeName, taskType); channel.BasicConsume(queueName, false, consumer); } while (true) { var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); Console.WriteLine("Received {0}", ea.RoutingKey); channel.BasicAck(ea.DeliveryTag, false); } } }