Example #1
0
        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();
                }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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();
                }
        }