91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

浦江县| 行唐县| 宣武区| 晋州市| 华宁县| 东至县| 浙江省| 孟连| 邻水| 岳西县| 容城县| 桑植县| 吉安县| 忻州市| 化州市| 河北区| 崇仁县| 乐山市| 密云县| 夏津县| 巴塘县| 潼关县| 崇文区| 睢宁县| 邳州市| 高唐县| 宜阳县| 固镇县| 霍林郭勒市| 赤水市| 合川市| 桐柏县| 额尔古纳市| 新安县| 盖州市| 沙雅县| 鹤壁市| 巴林右旗| 秀山| 沁阳市| 桃园市|