前言
消息中間件目前已經在很多大型的項目上得到了運用,我們常見的有 RabbitMq, activitymq,kafka,rocketmq,其中rocketmq是阿裡自己在kafka的基礎上用java寫的一個消息中間件。在我們使用的支付寶等應用中都有大量的使用。
附幾種常見的mq對比圖如下:

環境搭建
我們都知道大部分情況下都是在linux系統下部署服務。但是本篇的環境是在Windows下。
rabbitMQ是一個在AMQP協定标準基礎上完整的,可服用的企業消息系統。它遵循Mozilla Public License開源協定,采用 Erlang 實作的工業級的消息隊列(MQ)伺服器,Rabbit MQ 是建立在Erlang OTP平台上。是以在安裝rabbitMQ之前,需要先安裝Erlang 。
http://www.erlang.org/download/otp_win32_R16B03.exe,需要其他版本或者64位系統的,可以去官網下載下傳。
全部點選“下一步”就行。
有的選擇其他的安裝方式,可能需要添加一下系統環境變量
下載下傳運作 :http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.3/rabbitmq-server-3.2.3.exe ,需要其他版本或者64位系統的,可以去官網下載下傳。
依舊可以不改變預設進行安裝。
需要注意:預設安裝的RabbitMQ 監聽端口是5672
使用RabbitMQ 管理插件,可以更好的可視化方式檢視Rabbit MQ 伺服器執行個體的狀态。
打開指令視窗:
輸入指令:
重新開機服務才行,使用指令:
這時候,也許會出現這種結果:
“發生錯誤:發生系統錯誤 5。 拒絕通路。”
問題解決方案:使用管理者打開cmd再執行此指令:
在C:\Windows\System32 找到cmd.exe 輕按兩下執行。
使用rabbitmqctl控制台指令(位于C:\Program Files\RabbitMQ Server\rabbitmq_server-xxx\sbin>)來建立使用者,密碼,綁定權限等。
注意:安裝路徑不同的請看仔細啊。
rabbitmq的使用者管理包括增加使用者,删除使用者,檢視使用者清單,修改使用者密碼。
新增一個使用者:
檢視已有使用者及使用者的角色:
此時來看下我們目前使用者後面沒有“[administrator]”
這個administrator是幹嘛用的呢?這就涉及到使用者角色問題了:
rabbitmq使用者角色可分為五類:超級管理者, 監控者, 政策制定者, 普通管理者以及其他。
(1) 超級管理者(administrator)
可登陸管理控制台(啟用management plugin的情況下),可檢視所有的資訊,并且可以對使用者,政策(policy)進行操作。
(2) 監控者(monitoring)
可登陸管理控制台(啟用management plugin的情況下),同時可以檢視rabbitmq節點的相關資訊(程序數,記憶體使用情況,磁盤使用情況等)
(3) 政策制定者(policymaker)
可登陸管理控制台(啟用management plugin的情況下), 同時可以對policy進行管理。
(4) 普通管理者(management)
僅可登陸管理控制台(啟用management plugin的情況下),無法看到節點資訊,也無法對政策進行管理。
(5) 其他的
無法登陸管理控制台,通常就是普通的生産者和消費者
我們也給建立的使用者username 變成 “超級管理者” 角色:
rabbitmqctl.bat set_user_tags username administrator
修改密碼:
rabbitmqctl change_password userName newPassword
删除已存在的使用者:
rabbitmqctl.bat delete_user username
這樣基本的配置就結束了。
然後我們打開浏覽器 http://localhost:15672 通路Rabbit Mq的管理控制台,使用剛才建立的賬号登陸系統:
設定虛拟主機和使用者關系(預設虛拟主機名為 "/”),選中admin菜單,然後選中右邊的 virtual hosts 菜單,如下圖:
在最下面有一個添加虛拟主機,我們自己起好名稱點選 add virtual host 即可。
然後再上面的清單中就可以看到你新添加的主機,再點選你新添加的虛拟主機,為其配置設定使用者,我們首先可以配置設定我們前面建立的username 使用者,然後也可以在admin→users頁面添加新的使用者後,再将其添加到目前建立的虛拟主機。
對于這塊虛拟主機和使用者,我個人的了解就像是你買了一輛車(使用者),我買了一輛車(使用者), 但是我們都得去交管所上拍照(虛拟主機)。
java代碼編寫
現在環境搭好,開始進行code。
建立一個maven工程,新手可參考 https://www.cnblogs.com/JJJ1990/p/8384386.html 前半部分。
在pom檔案中添加jar包引用
釋出者
我們先建立一個publisher()方法,在引入jar包的時候要特别注意,同樣的名稱有好幾個包,我們統一都隻引用 com.rabbitmq.client。
在queueDeclare方法中 除了隊列名稱外的其餘4項參數意義如下
* @param durable true if we are declaring a durable queue (the queue will survive a server restart)
* @param exclusive true if we are declaring an exclusive queue (restricted to this connection)
* @param autoDelete true if we are declaring an autodelete queue (server will delete it when no longer in use)
* @param arguments other properties (construction arguments) for the queue
消費者
對比消費者和釋出者的代碼我們可以發現,我用了不同的使用者連接配接同一個虛拟主機 test_vhosts
建立main方法
運作代碼後可以看到如下結果:
浏覽器打開rabbitmq界面。找到queues 菜單,點選後,就可以在清單中找到我們建立的隊列,找到我剛才建立的jqueue隊列,點進去後,找到下面的 publish message 目錄
在Payload 中我們随便輸入一些文字 點選釋出就可以看到代碼的控制台已經收到了這些消息
控制台輸出:
這說明程式運作後,消費者一直在監聽目前的隊列,一旦有消息,就會立刻擷取。
give me the ball!