1. 程式人生 > 實用技巧 >netcore使用RabbitMQ入門--win10開發環境(實踐篇無理論)

netcore使用RabbitMQ入門--win10開發環境(實踐篇無理論)

1.進入rabbitMQ官網下載安裝包

2.點選安裝包安裝的時候會提示需要先裝erlang

點選是會自動跳轉到erlang的下載介面如果沒有跳轉可以直接點選這裡下載,根據系統選擇下載包

下載完之後雙擊exe安裝包進行安裝,一直下一步就行了(如果不想裝在c盤那就改一下碟符)

3.裝完了erlang,回去找到剛才第一步下載的rabbitMQ的安裝包雙擊安裝,一樣的一直下一步就行了(中間遇到需要給它網路點確定就可以了)

4.以上步驟完成了rabbitMQ服務的安裝,為了方便操作和管理下面我們安裝視覺化管理介面

4.1開啟cmd介面進入rabbitMQ的安裝目錄下的sbin目錄

  

4.2根據官網步驟執行命令rabbitmq-plugins enable rabbitmq_management

  

4.3安裝成功找到安裝目錄找到rabbitmq-server.bat雙擊執行(如果有錯就右鍵以管理員身份執行)出現如下介面

4.4開啟瀏覽器訪問http://localhost:15672/

4.5預設使用者和密碼都是guest直接登入看下結果


程式碼實現

1,建立demo生產者控制檯專案

2,通過nuget安裝RabbitMQ.Client

3,在主函式Main裡面寫生產者程式碼這裡先生產5條訊息只是簡單的demo(特別提醒程式碼裡的埠號是5672不是進入管理地址的15672)

string hostName = "192.168.50.176";
            
int port = 5672;//預設埠5672;前端介面的埠是15672特別注意不要混淆 string userName = "wyb"; string password = "123456"; string virtualHost = "/"; //建立一個連線工廠 var factory = new ConnectionFactory(); factory.UserName = userName; factory.Password
= password; factory.HostName = hostName; factory.Port = port; factory.VirtualHost = virtualHost; //建立一個連線,此時可以在rabbitmq後臺Web管理頁面中的Connections中看到一個連線生成 //一個連線可以建立多個通道 var connection = factory.CreateConnection(); string queueName = "q1";//佇列名稱 //建立一個通道 //此時可以在rabbitmq後臺Web管理頁面中的Channels中看到一個新通道生成 var channel = connection.CreateModel(); //給通道繫結一個佇列,佇列如果不存在,則會建立新佇列,如果佇列已存在,那麼引數一定要正確,特別是arguments引數,否則會報錯 var arguments = new Dictionary<string, object>() { { "x-queue-type", "classic" } }; channel.QueueDeclare(queue: queueName, durable: true, exclusive: false, autoDelete: false, arguments: arguments); //釋出5條訊息 for (var i = 0; i < 5; i++) { var buffer = Encoding.UTF8.GetBytes(i.ToString()); channel.BasicPublish("", queueName, null, buffer); Console.WriteLine("釋出訊息:"+i); } channel.Close(); Console.ReadKey();
View Code

4,f5執行專案看到如下結果就表示成功

5,同生產者專案一樣的步驟建立一下消費者控制檯專案(一樣nuget安裝RabbitMQ.Client)

6,在消費者專案的main函式裡寫消費者的程式碼

string hostName = "192.168.50.176";
            int port = 5672;//預設埠5672;前端介面的埠是15672特別注意不要混淆
            string userName = "wyb";
            string password = "123456";
            string virtualHost = "/";

            //建立一個連線工廠
            var factory = new ConnectionFactory();
            factory.UserName = userName;
            factory.Password = password;
            factory.HostName = hostName;
            factory.Port = port;
            factory.VirtualHost = virtualHost;
            //建立一個連線,此時可以在rabbitmq後臺Web管理頁面中的Connections中看到一個連線生成
            //一個連線可以建立多個通道
            var connection = factory.CreateConnection();

            string queue = "q1";//佇列名稱

            //建立一個通道
            //此時可以在rabbitmq後臺Web管理頁面中的Channels中看到一個新通道生成
            var channel = connection.CreateModel();
            //給通道繫結一個佇列,佇列如果不存在,則會建立新佇列,如果佇列已存在,那麼引數一定要正確,特別是arguments引數,否則會報錯
            var arguments = new Dictionary<string, object>() { { "x-queue-type", "classic" } };
            channel.QueueDeclare(queue: queue, durable: true, exclusive: false, autoDelete: false, arguments: arguments);
            //channel.BasicQos(2, 2, false);//設定QOS

            //在通道中定義一個事件消費者
            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
            consumer.Received += (sender, e) =>
            {
                var body = e.Body.Span;
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine($"接收到訊息:{message}");

                Thread.Sleep(500);//暫停一下

                //通知訊息已被處理,如果沒有,那麼訊息將會被重複消費
                channel.BasicAck(e.DeliveryTag, false);
            };
            //ack設定成false,表示不自動提交,那麼就需要在訊息被消費後,手動呼叫BasicAck去提交訊息
            channel.BasicConsume(queue, false, consumer);

            Console.ReadKey();
View Code

7執行消費者專案結果如下

結束

簡單操作到此,後面再介紹實際應用