中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

RabbitMQ~廣播(bo)消(xiao)息

定義

廣播消息是指生產者產生的消息將分發給所有訂閱這個消息的消費者,而普通的模式是:一批消息可以被多個人共同消費,如consumer1可(ke)能消費1,3,5記(ji)錄,而consumer2可(ke)能消費的(de)是2,4,6這種(zhong)模塊就(jiu)是共同消費模塊;而今天說的是廣播消息,它是指一些消息同時被推送到多個訂閱者,而這些訂閱者收到的消息都是完整的,如consumer1收到的會是1,2,3,4,5,6,而consumer2回到的也會(hui)是1,2,3,4,5,6,這種就像廣(guang)播一樣,把消(xiao)息廣(guang)播給多(duo)人!

實質(zhi)上是(shi)對Fanout類型的exchange的實現(xian)

通過我們(men)RabbitMq的后(hou)臺(tai)可以看到,它會使用fanout模式(shi),并且會自己(ji)添加隊列(lie),當然隊列(lie)名稱也是動態的.

廣播模式的生產者

 static void TestFanout(int _index)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    const string EXCHANGE_NAME = "logs";
                    const string ROUTING_KEY = "";
                    channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//廣播
                    var message = "hello out";
                    var body = Encoding.UTF8.GetBytes(message);
                    channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, null, body);//不需要指(zhi)(zhi)定routing key,設(she)置(zhi)了(le)fanout,指(zhi)(zhi)了(le)也沒有用.
                    Console.WriteLine(" [x] Sent {0}", message + _index);
                }
            }
        }

廣播模式的消費者

        static void TestFanout()
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            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();
                    string queueName = queueOk.QueueName;
                    channel.QueueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);//不需要指(zhi)定routing key,設置了(le)fanout,指(zhi)了(le)也沒有用(yong).
                    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();//掛起的(de)操作
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    }
                }
            }
        }

通過測試我們(men)發(fa)布,由producer生產(chan)的(de)消息(xi),已經被推送到所(suo)有消費(fei)者那邊了...

以上就是RabbitMQ的廣播模式,通過本(ben)講的學習(xi),我們知道隊(dui)列的又一用法!

感謝各位的閱讀!

 

posted @ 2017-02-28 14:43  張占嶺  閱讀(3564)  評論(0)    收藏  舉報