RabbitMQ是一個在AMQP協議標準基礎上完整的,可複用的企業消息系統。它遵循Mozilla Public License開源協議,採用 Erlang 實現的工業級的消息隊列(MQ)服務器,Rabbit MQ 是創建在Erlang OTP平臺上。html
裝RabbitMQ服務器必須首先安裝 Erlang 運行環境。android
安裝Erlang 時要注意安裝的RabbityMQ 所依賴的Erlang版本,根據RabbitMQ的要求選擇一個版本,這裏我要安裝的RabbitMQ的版本是 3.7.7 ,他依賴的Erlang版本範圍是windows
19.3.6.4 到 21.0.x,所以我選擇版本是OTP 20.3. Erlang下載地址。下載Erlang安裝包後直接安裝就能夠了。api
我這裏是默認安裝因此Erlang的安裝路徑在:瀏覽器
C:\Program Files\erl9.3\bin\erl.exe
點擊肯定在系統環境變量裏就增長剛剛添加的ERLANG_HOME服務器
注意:若是以前安裝了Erlang的其餘版本,須要卸載後在進行從新安裝和設置。測試
在開始菜單查找Erlang,點擊啓動 打開以下界面,那麼Erlang就安裝成功了。接下來就安裝RabbitMQ。網站
能夠在RabbitMQ的官方網站下載最新版本的RabbitMQ服務器安裝程序,RabbitMQ下載地址, 這裏我下載的是官方推薦的最新版本rabbitmq-server-3.7.7.exe, 而後點擊默認安裝。spa
RabbitMQ安裝好後是做爲windows service 運行在後臺。插件
RabbitMQ 安裝好後在開始菜單輸入rabbitmq 會看到三個菜單:
這裏的三個菜單是提供控制Windows service的命令,爲了可以在任意Windows命令窗口上操控RabbitMQ服務須要在系統里加一個環境變量而且配置在系統的PHTH環境變量中。
首先添加一個RABBITQM_SERVER變量:
而後在系統的path變量中配置以下:
這樣就能夠在windows administrator啓動的CMD窗口操控RabbitMQ服務了。不須要每次都定位到:
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.7\sbin>
咱們用命令查看一下RabbtitMQ的全部插件:
C:\WINDOWS\system32>rabbitmq-plugins list
看到RabbtitMQ 羅列出來了不少插件
咱們用下列命令安裝rabbitmq_management插件,這款插件是能夠可視化的方式查看RabbitMQ 服務器實例的狀態,以及操控RabbitMQ服務器。
C:\WINDOWS\system32>rabbitmq-plugins enable rabbitmq_management
運行完命令後,看到下圖表示安裝成功了。
如今咱們在瀏覽器中輸入:http://localhost:15672 能夠看到一個登陸界面:
這裏可使用默認帳號guest/guest登陸後的界面以下:
在瀏覽器中輸入 http://localhost:15672/api/ 就能夠看到 RabbitMQ Management HTTP API 文檔,以下圖:
這樣就能夠查看RabbitMQ server實例狀態的相關信息了。
用命令rabbitmqctl list_users 查看一下現rabbitmq_management註冊用戶
發現如今只有一個用戶guest,而且它的tag是administrator.
那麼在命令行下建立一個用戶,建立用戶的命令合是:
rabbitmqctl add_user [username] [password]
如今建立一個username=rabbit1 password=rabbit1的用戶, 命令以下:
rabbitmqctl add_user rabbit1 rabbit1
建立成功了:
如今看下有多少用戶,跑一下命令:
rabbitmqctl list_users
發現用戶列表裏多了一個用戶 rabbit1,可是tag是空的。使用命令給rabbit設置tag,設置tag的命令格式:
rabbitmqctl set_user_tag [tag1] [tag2] ...
一次能夠給一個用戶設置多個tag,也能夠設置一個
如今rabbit1 有兩個tag了一個是administrator ,一個是none.
有5個tag可供選擇,分別是:administrator ,monitoring,policymaker,management和none 有興趣的同窗能夠到這裏瞭解各個tag的含義,其實這裏的tag表明的是權限,administrator是最高權限,none表示不能訪問,這裏administrator和none的組合,權限應該是向高看齊,忽略none,用的是administrator的權限。咱們用rabbit1/rabbit1 登陸rabbitmq_management。
其實有了rabbitmq_management這個可視化插件,不少事情均可以在這個插件裏幹,包括建立用戶,建立交換機(Exchange)和建立隊列(Queque)。
關於Rabbit的在windows下的基本配置就告一段落,關於更多的更高級的配置,能夠參考官網,有了rabbitmq_management 插件確實方便了很多。下面就開始建立客戶端進行測試了。
建立兩個.Net Core Console 類型的應用程序,一個用於發送消息,一個用於接收消息。
using System; using System.Text; using RabbitMQ.Client; namespace Q.Demo.Send { class Program { static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); while (true) { var input = Console.ReadLine(); string message = input; var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body); Console.WriteLine(" [x] Sent {0}", message); } } Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } }
using System; using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; namespace Q.Demo.Receive { class Program { static void Main(string[] args) { var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine(" [x] Received {0}", message); }; channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); } } } }
運行輸入消息效果以下:
關於RabbitMQ在windows 下的安裝和基本設置步驟:
1.安裝對應版本的Erlang 並設置環境變量
2.安裝RabbitMQ
3.設置環境變量
4.安裝插件rabbitmq_management
5.有了插件rabbitmq_management不少事情就能夠在這個可視化插件中來完成了。