netcore使用RabbitMQ入門--win10開發環境(實踐篇無理論)
阿新 • • 發佈:2020-07-24
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";View Codeint 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();
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執行消費者專案結果如下
結束
簡單操作到此,後面再介紹實際應用