亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中RabbitMQ應用的示例分析

發布時間:2021-03-06 13:51:00 來源:億速云 閱讀:250 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關C#中RabbitMQ應用的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

發送端:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "hostserver" }; 
                       using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {
                    im.ExchangeDeclare("rabbitmq_route", ExchangeType.Direct);
                    im.QueueDeclare("rabbitmq_query", false, false, false, null);
                    im.QueueBind("rabbitmq_query", "rabbitmq_route", ExchangeType.Direct, null);                    
                    for (int i = 0; i < 1000; i++)
                    {                        byte[] message = Encoding.UTF8.GetBytes("Hello Lv");
                        im.BasicPublish("rabbitmq_route", ExchangeType.Direct, null, message);
                        Console.WriteLine("send:" + i);
                    }
                }
            }

接收端:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "hostserver" }; 
                       using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {                    while (true)
                    {
                        BasicGetResult res = im.BasicGet("rabbitmq_query", true);                        
                        if (res != null)
                        {
                            Console.WriteLine("receiver:"+UTF8Encoding.UTF8.GetString(res.Body));
                        }
                    }
                }
            }

發送端一次性發送一千條,發送過程很快,接收時相對要慢一些。

C#中RabbitMQ應用的示例分析

上述DEMO只限一個接收著,那相同的發送量,多個接收者會出現什么情況,添加一個新的接收端,直接復制DEMO中接收端即可。

C#中RabbitMQ應用的示例分析

附上運行結果:

C#中RabbitMQ應用的示例分析

可以看到,在兩個接收端同時運行時,RabbitMQ 會按順序的分發每個消息。當每個收到確認后,會將該消息刪除,然后將下一個分發到下一個接收者,主要是因為RabbitMQ的循環分發機制。

上面簡單說了一下,在多個接收者時,因為循環分發的原因,消息幾乎是兩個接收端對分的。

那么如何將相同的消息分發到多個接收端。

對發送端代碼進行修改:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "host" }; 
                       using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {
                    im.ExchangeDeclare("rabbitmq_route_Fanout", ExchangeType.Fanout);// 路由                    
                    int i = 0;                    
                    while (true)
                    {
                        Thread.Sleep(1000);
                        ++i;                        
                        byte[] message = Encoding.UTF8.GetBytes(i.ToString());
                        im.BasicPublish("rabbitmq_route_Fanout", "", null, message);
                        Console.WriteLine("send:" + i.ToString());
                    }
                }
            }

與上種方式比較,會發現在代碼注釋后面少兩段代碼,在設置了Fanout方式后,不需要再指定隊列名稱。停一秒是為了方便看結果,以免刷新太快。

再來看看接收端代碼:

            ConnectionFactory factory = new ConnectionFactory { HostName = "hostname", UserName = "root", Password = "root001", VirtualHost = "host" };  
                      using (IConnection conn = factory.CreateConnection())
            {                using (IModel im = conn.CreateModel())
                {
                    im.ExchangeDeclare("rabbitmq_route_Fanout", ExchangeType.Fanout);                    
                    var queueOk = im.QueueDeclare();//1
                    im.QueueBind(queueOk.QueueName, "rabbitmq_route_Fanout", "");//2                    
                    var consumer = new QueueingBasicConsumer(im);//3
                    im.BasicConsume(queueOk.QueueName, true, consumer);//4                    
                    while (true)
                    {var _result = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//5                        
                    var body = _result.Body;                        
                    var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine("received:{0}", message);
                    }
                }

當一個新的接收端連接時(消費者),需要一個申報一個新的隊列,注釋1處代碼,RabbitMQ在申報隊列時,如果不指定名稱會自動生成一個,這還是不錯的。

兩個接收端時運行結果,符合預期。

C#中RabbitMQ應用的示例分析

關于“C#中RabbitMQ應用的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南木林县| 都江堰市| 辽宁省| 仁怀市| 武乡县| 密云县| 绥德县| 禄丰县| 沁水县| 汝城县| 东乌珠穆沁旗| 西乌| 进贤县| 海原县| 吉木乃县| 鄱阳县| 佛冈县| 遂川县| 六枝特区| 马公市| 五大连池市| 册亨县| 鄢陵县| 新津县| 中江县| 屯昌县| 青铜峡市| 洛宁县| 齐河县| 象山县| 朝阳市| 屯留县| 仁布县| 紫金县| 乌海市| 稻城县| 东乌珠穆沁旗| 东港市| 张家界市| 高碑店市| 京山县|