Esempio n. 1
0
        static void Main()
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#....................CONSUMER 1....................#");
            Console.WriteLine("####################################################");
            Console.WriteLine("Aguardando mensagens para processamento");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: rabbitMQConfigurations.QueueName,
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += (sender, ea) =>
                    {
                        var tempoExecucao = new Random().Next(5);

                        var message = Encoding.UTF8.GetString(ea.Body);
                        Console.WriteLine(Environment.NewLine +
                                          $"[Nova mensagem recebida] {message} executada em {tempoExecucao} segundos");
                        Thread.Sleep(tempoExecucao * 1000);

                        channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                    };

                    channel.BasicConsume(queue: rabbitMQConfigurations.QueueName,
                                         autoAck: false,
                                         consumer: consumer);


                    // Aguarda que o evento CancelKeyPress ocorra
                    _waitHandle.WaitOne();
                }
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#......................Sub 1.......................#");
            Console.WriteLine("####################################################");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            #region subscribe do RabbitMQ na Exchange Direct com RoutingKey
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: rabbitMQConfigurations.ExchangeNameDirect, type: ExchangeType.Direct);

                    var queueName = channel.QueueDeclare().QueueName;

                    //Bind com a routingKey das mensagens de opcao 0
                    string opcao = "0";
                    channel.QueueBind(queue: queueName,
                                      exchange: rabbitMQConfigurations.ExchangeNameDirect,
                                      routingKey: opcao);


                    //Bind com a routingKey das mensagens de opcao 1
                    opcao = "1";
                    channel.QueueBind(queue: queueName,
                                      exchange: rabbitMQConfigurations.ExchangeNameDirect,
                                      routingKey: opcao);

                    var consumer1 = new EventingBasicConsumer(channel);
                    consumer1.Received += Sub_ReceivedDirect;
                    channel.BasicConsume(queue: queueName,
                                         autoAck: true,
                                         consumer: consumer1);

                    // Aguarda que o evento CancelKeyPress ocorra
                    _waitHandle.WaitOne();
                }
            }
            #endregion
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#....................PRODUCER......................#");
            Console.WriteLine("####################################################");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: rabbitMQConfigurations.QueueName,
                                         durable: true,
                                         exclusive: false,
                                         autoDelete: false,
                                         arguments: null);

                    var properties = channel.CreateBasicProperties();
                    properties.Persistent = true;

                    var numero = 20;
                    Console.WriteLine($"Serão gerados {numero} mensagens para que os consumidores 1 e 2 recebam as mensagens aleatoriamente");
                    Console.WriteLine("Pressione enter para iniciar...");
                    Console.ReadLine();

                    for (int i = 0; i < numero; i++)
                    {
                        string message =
                            $"{DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")} - " +
                            $"Mensagem: {i}";
                        var body = Encoding.UTF8.GetBytes(message);

                        channel.BasicPublish(exchange: "",
                                             routingKey: rabbitMQConfigurations.QueueName,//QueueName pq sera o mesmo nome nos consumers
                                             basicProperties: properties,
                                             body: body);
                    }
                }

            _waitHandle.WaitOne();
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#.......................Pub........................#");
            Console.WriteLine("####################################################");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            #region publisher para o RabbitMQ para a Exchange Fanout
            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: rabbitMQConfigurations.ExchangeNameFanout,
                                            type: ExchangeType.Fanout);

                    while (true)
                    {
                        #region Mensagem a ser enviada
                        Console.WriteLine("Digite a mensagem a ser enviada:");
                        var    conteudo = Console.ReadLine();
                        string message  =
                            $"{DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")} - " +
                            $"Mensagem: {conteudo}";
                        var body = Encoding.UTF8.GetBytes(message);
                        #endregion

                        channel.BasicPublish(exchange: rabbitMQConfigurations.ExchangeNameFanout,
                                             routingKey: "",
                                             basicProperties: null,
                                             body: body);
                        Console.WriteLine("Mensagem enviada com sucesso!");
                    }
                }
            #endregion

            _waitHandle.WaitOne();
        }
Esempio n. 5
0
        static void Main()
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#...................TOPIC Receiver1................#");
            Console.WriteLine("####################################################");
            Console.WriteLine();
            Console.WriteLine("Este receiver recebera mensagens de:");
            Console.WriteLine("WEB.todos.todos");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: rabbitMQConfigurations.TopicName, type: ExchangeType.Topic);
                    var queueName = channel.QueueDeclare().QueueName;

                    var routingKeys = new List <string>();
                    routingKeys.Add("w.*.*");
                    //routingKeys.Add("*.l.*");
                    //routingKeys.Add("w.*.c");

                    foreach (var bindingKey in routingKeys)
                    {
                        channel.QueueBind(queue: queueName, exchange: rabbitMQConfigurations.TopicName, routingKey: bindingKey);
                    }

                    var consumer = new EventingBasicConsumer(channel);
                    consumer.Received += Topic_Received;
                    channel.BasicConsume(queue: queueName, autoAck: true, consumer: consumer);

                    // Aguarda que o evento CancelKeyPress ocorra
                    _waitHandle.WaitOne();
                }
        }
Esempio n. 6
0
        public RpcClient()
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService = new RabbitMQServicesConfigurations();
            rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            connection         = factory.CreateConnection();
            channel            = connection.CreateModel();
            replyQueueName     = channel.QueueDeclare().QueueName;
            consumer           = new EventingBasicConsumer(channel);
            consumer.Received += (model, ea) =>
            {
                if (!callbackMapper.TryRemove(ea.BasicProperties.CorrelationId, out TaskCompletionSource <string> tcs))
                {
                    return;
                }
                var body     = ea.Body;
                var response = Encoding.UTF8.GetString(body.ToArray());
                tcs.TrySetResult(response);
            };
        }
Esempio n. 7
0
        static void Main(string[] args)
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#...................TOPIC Producer.................#");
            Console.WriteLine("####################################################");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: rabbitMQConfigurations.TopicName,
                                            type: ExchangeType.Topic);
                    while (true)
                    {
                        Console.Clear();
                        Console.WriteLine("Em topicos e necessario o uso de routingKey, e a estrutura da rota utilizada no exemplo sera:");
                        Console.WriteLine("servidor.tipoMensagem.severidade");

                        Console.WriteLine("1) O consumerTopic1 - recebera todas as mensagens do servidor: WEB");
                        Console.WriteLine("2) O consumerTopic2 - recebera todas as mensagens do tipoMensagem: Log");
                        Console.WriteLine("3) O consumerTopic3 - recebera todas as mensagens do servidor: WEB e severidade: Critical");

                        Console.WriteLine("Digite a opcao para servidor");
                        Console.WriteLine("w) Web");
                        Console.WriteLine("d) BancoDados");
                        Console.WriteLine("a) Arquivos");
                        var servidor = Console.ReadLine();

                        Console.WriteLine("Digite a opcao para tipoMensagem");
                        Console.WriteLine("l) Log");
                        Console.WriteLine("e) Email");
                        var tipoMensagem = Console.ReadLine();

                        Console.WriteLine("Digite a opcao para severidade");
                        Console.WriteLine("c) Critical");
                        Console.WriteLine("w) Warning");
                        var severidade = Console.ReadLine();

                        var routingKey = $"{servidor}.{tipoMensagem}.{severidade}";

                        Console.WriteLine($"RoutingKey enviado: {routingKey}");

                        string message =
                            $"{DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")} - " +
                            $"Mensagem gerada para {routingKey}";
                        var body = Encoding.UTF8.GetBytes(message);

                        channel.BasicPublish(exchange: rabbitMQConfigurations.TopicName,
                                             routingKey: routingKey,
                                             basicProperties: null,
                                             body: body);
                    }
                }

            _waitHandle.WaitOne();
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#................Pub com RountingKey...............#");
            Console.WriteLine("####################################################");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            #region publisher para o RabbitMQ para a Exchange Direct com routingKey
            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.ExchangeDeclare(exchange: rabbitMQConfigurations.ExchangeNameDirect, type: ExchangeType.Direct);

                    while (true)
                    {
                        #region Escolha para quais subscriber serão enviados
                        var opcao = -1;
                        while (opcao < 0 || opcao > 2)
                        {
                            Console.WriteLine("Escolha a opcao:");
                            Console.WriteLine("0 - Enviar para todos os susbcriber");
                            Console.WriteLine("1 - Somente para o subscriber 1");
                            Console.WriteLine("2 - Somente para o subscriber 2");
                            opcao = Convert.ToInt32(Console.ReadLine());
                            if (opcao < 0 || opcao > 2)
                            {
                                Console.WriteLine("Opcao invalida");
                            }
                        }
                        #endregion
                        #region Mensagem a ser enviada
                        Console.WriteLine("Digite a mensagem a ser enviada:");
                        var    conteudo = Console.ReadLine();
                        string message  =
                            $"{DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")} - " +
                            $"Mensagem : {conteudo}, routingKey: {opcao}";
                        var body = Encoding.UTF8.GetBytes(message);
                        #endregion

                        channel.BasicPublish(exchange: rabbitMQConfigurations.ExchangeNameDirect,
                                             routingKey: opcao.ToString(),
                                             basicProperties: null,
                                             body: body);

                        Console.WriteLine("Mensagem enviada com sucesso!");
                    }
                }
            #endregion

            _waitHandle.WaitOne();
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            #region Configuracoes do RabbitMq
            var rabbitMqService        = new RabbitMQServicesConfigurations();
            var rabbitMQConfigurations = rabbitMqService.RabbitMQConfigurations;
            var factory = rabbitMqService.Factory;
            #endregion

            #region Cabecalho
            Console.WriteLine("####################################################");
            Console.WriteLine("#...................Server.........................#");
            Console.WriteLine("####################################################");
            #endregion

            #region Evento para sair
            Console.CancelKeyPress += (o, e) =>
            {
                Console.WriteLine("Saindo...");

                // Libera a continuação da thread principal
                _waitHandle.Set();
                e.Cancel = true;
            };
            #endregion

            #region subscribe do RabbitMQ na Queue de RPC
            using (var connection = factory.CreateConnection())
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: rabbitMQConfigurations.QueueName, durable: false, exclusive: false, autoDelete: false, arguments: null);
                    channel.BasicQos(0, 1, false);
                    var consumer = new EventingBasicConsumer(channel);
                    channel.BasicConsume(queue: rabbitMQConfigurations.QueueName, autoAck: false, consumer: consumer);

                    consumer.Received += (model, ea) =>
                    {
                        string response = null;

                        var body       = ea.Body;
                        var props      = ea.BasicProperties;
                        var replyProps = channel.CreateBasicProperties();
                        replyProps.CorrelationId = props.CorrelationId;

                        try
                        {
                            var message = Encoding.UTF8.GetString(body.ToArray());
                            int n       = int.Parse(message);
                            Console.WriteLine(" [.] fib({0})", message);
                            response = fib(n).ToString();
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(" [.] " + e.Message);
                            response = "";
                        }
                        finally
                        {
                            var responseBytes = Encoding.UTF8.GetBytes(response);
                            channel.BasicPublish(exchange: "", routingKey: props.ReplyTo, basicProperties: replyProps, body: responseBytes);
                            channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                        }
                    };

                    // Aguarda que o evento CancelKeyPress ocorra
                    _waitHandle.WaitOne();
                }
            #endregion
        }