static void Main(string[] args) { Console.WriteLine("VowelConsCounter"); HashSet <char> vowels = new HashSet <char>(); HashSet <char> consonants = new HashSet <char>(); InitializeConsonants(consonants); InitializeVowels(vowels); // Получаем сообщения из директа text-ranc-tasks const string inputExchange = "text-rank-tasks"; var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: inputExchange, type: "direct"); var queueName = "count-task"; channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); channel.QueueBind(queue: queueName, exchange: inputExchange, routingKey: "text-rank-task"); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); var msgArgs = Regex.Split(message, ":"); if (msgArgs.Length == 2 && msgArgs[0] == "TextRankTask") { string id = msgArgs[1]; string text = GetTextById(id); id = "text_" + id; VowelConsCounted result = CalculateVowelsCons(text, vowels, consonants); result.Id = id; // Дальше посылаем данные в другой компонент SendDataToQueue(result, channel); } }; channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer); Console.ReadLine(); } }
private static void SendDataToQueue(VowelConsCounted data, IModel channel) { channel.ExchangeDeclare("vowel-cons-counter", "direct"); string message = "VowelConsCounted:" + data.Id + ":" + data.Vowels + ":" + data.Cons; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "vowel-cons-counter", routingKey: "vowel-cons-task", basicProperties: null, body: body); }
private static void SendDataToQueue(VowelConsCounted data, IModel channel) { channel.ExchangeDeclare(OUTPUT_EXCHANGE_NAME, "direct"); string message = "VowelConsCounted:" + data.Id + ":" + data.Vowels + ":" + data.Cons; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: OUTPUT_EXCHANGE_NAME, routingKey: OUTPUT_ROUTING_KEY, basicProperties: null, body: body); }
private static void RabbitListener() { var factory = new ConnectionFactory() { HostName = HOST_NAME }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: INPUT_EXCHANGE_NAME, type: "direct"); channel.QueueDeclare(queue: QUEUE_NAME, durable: false, exclusive: false, autoDelete: false, arguments: null); channel.QueueBind(queue: QUEUE_NAME, exchange: INPUT_EXCHANGE_NAME, routingKey: INPUT_ROUTING_KEY); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); var msgArgs = Regex.Split(message, ":"); if (msgArgs.Length == 2 && msgArgs[0] == "TextRankTask") { string id = msgArgs[1]; string text = GetValueById(id); Console.WriteLine("ID: " + id + " text: " + text); VowelConsCounted result = CountVowelCons(id, text); SendDataToQueue(result, channel); } }; channel.BasicConsume(queue: QUEUE_NAME, autoAck: true, consumer: consumer); Console.ReadLine(); } }