RabbitMQ消息機制廣播分發


        public static void SendMessage()
        {
            var factory = new ConnectionFactory();
            factory.HostName = "192.168.1.117";
            factory.UserName = "witbank";
            factory.Password = "123456";
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    const string EXCHANGE_NAME = "logs";
                    const string ROUTING_KEY = "";
                    channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//廣播
                    while (true)
                    {
                        string message = "請輸入要發送的信息";

                        Console.WriteLine(message);
                        message = Console.ReadLine();
                        var body = Encoding.UTF8.GetBytes(message);
                        channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, null, body);//不需要指定routing key,設置了fanout,指了也沒有用.
                        Console.WriteLine(" [x] Sent {0}", message);
                    }
                }
            }
        }

  

        public static void ReceiveMessage()
        {
            var factory = new ConnectionFactory();
            factory.HostName = "192.168.1.117";
            factory.UserName = "witbank";
            factory.Password = "123456";
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    const string EXCHANGE_NAME = "logs";
                    const string ROUTING_KEY = "";
                    channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//廣播
                    QueueDeclareOk queueOk = channel.QueueDeclare();//每當Consumer連接時,我們需要一個新的,空的queue。因為我們不對老的log感興趣。幸運的是,如果在聲明queue時不指定名字,那么RabbitMQ會隨機為我們選擇這個名字。
                    ////現在我們已經創建了fanout類型的exchange和沒有名字的queue(實際上是RabbitMQ幫我們取了名字)。
                    ////那exchange怎么樣知道它的Message發送到哪個queue呢?答案就是通過bindings:綁定。
                    string queueName = queueOk.QueueName;//得到RabbitMQ幫我們取了名字
                    channel.QueueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);//不需要指定routing key,設置了fanout,指了也沒有用.
                    var consumer = new QueueingBasicConsumer(channel);
                    channel.BasicConsume(queueName, true, consumer);
                    Console.WriteLine(" [*] Waiting for messages." + "To exit press CTRL+C");
                    while (true)
                    {
                        var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//掛起的操作
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    }
                }
            }
        }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM