生活随笔
收集整理的這篇文章主要介紹了
:Windows下RabbitMQ安装及入门
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.Windows下安裝RabbitMQ需要以下幾個步驟
?? (1):下載erlang,原因在于RabbitMQ服務端代碼是使用并發(fā)式語言erlang編寫的,下載地址:http://www.erlang.org/downloads,雙擊.exe文件進行安裝就好,安裝完成之后創(chuàng)建一個名為ERLANG_HOME的環(huán)境變量,其值指向erlang的安裝目錄,同時將%ERLANG_HOME%\bin加入到Path中,最后打開命令行,輸入erl,如果出現(xiàn)erlang的版本信息就表示erlang語言環(huán)境安裝成功;
??????????????????????
?
?? (2):下載RabbitMQ,下載地址:http://www.rabbitmq.com/,同樣雙擊.exe進行安裝就好(這里需要注意一點,默認的安裝目錄是C:/Program Files/....,這個目錄中是存在空格符的,我們需要改變安裝目錄,貌似RabbitMQ安裝目錄中是不允許有空格的,我之前踩過這個大坑);
?? (3):安裝RabbitMQ-Plugins,這個相當于是一個管理界面,方便我們在瀏覽器界面查看RabbitMQ各個消息隊列以及exchange的工作情況,安裝方法是:打開命令行cd進入rabbitmq的sbin目錄(我的目錄是:E:\software\rabbitmq\rabbitmq_server-3.6.5\sbin),輸入:rabbitmq-plugins enable rabbitmq_management命令,稍等會會發(fā)現(xiàn)出現(xiàn)plugins安裝成功的提示,默認是安裝6個插件,如果你在安裝插件的過程中出現(xiàn)了下面的錯誤:????????
?? 解決方法是:首先在命令行輸入:rabbitmq-service stop,接著輸入rabbitmq-service remove,再接著輸入rabbitmq-service install,接著輸入rabbitmq-service start,最后重新輸入rabbitmq-plugins enable rabbitmq_management試試,我是這樣解決的;
?? (4):插件安裝完之后,在瀏覽器輸入http://localhost:15672進行驗證,你會看到下面界面,輸入用戶名:guest,密碼:guest你就可以進入管理界面,當然用戶名密碼你都可以變的;
2.安裝完RabbitMQ之后,我們先來簡單了解下RabbitMQ中涉及到的幾個概念
??? producer:消息生產(chǎn)者
??? consumer:消息消費者
?? ? virtual host:虛擬主機,在RabbitMQ中,用戶只能在虛擬主機的層面上進行一些權限設置,比如我可以訪問哪些隊列,我可以處理哪些請求等等;
???? broker:消息轉(zhuǎn)發(fā)者,也就是我們RabbitMQ服務端充當?shù)墓δ芰?#xff0c;那么消息是按照什么規(guī)則進行轉(zhuǎn)發(fā)的呢?需要用到下面幾個概念;
? ?? exchange:交換機,他是和producer直接進行打交道的,有點類似于路由器的功能,主要就是進行轉(zhuǎn)發(fā)操作的唄,那么producer到底用哪個exchange進行路由呢?這個取決于routing key(路由鍵),每個消息都有這個鍵,我們也可以自己設定,其實就是一字符串;
???? queue:消息隊列,用于存放消息,他接收exchange路由過來的消息,我們可以對隊列內(nèi)容進行持久化操作,那么queue到底接收那個exchange路由的消息呢?這個時候就要用到binding key(綁定鍵)了,綁定鍵會將隊列和exchange進行綁定,至于綁定方式,RabbitMQ提供了多種方式,大家可以看看鴻洋大神的RabbitMQ博客系列(點擊查看);
???? 以上就是RabbitMQ涉及到的一些概念了,用一張圖表示這些概念之間的關系就是:
3.RabbitMQ簡單使用
???producer(生產(chǎn)者)端步驟:
??? (1):創(chuàng)建ConnectionFactory,并且設置一些參數(shù),比如hostname,portNumber等等
??? (2):利用ConnectionFactory創(chuàng)建一個Connection連接
??? (3):利用Connection創(chuàng)建一個Channel通道
? ? (4):創(chuàng)建queue并且和Channel進行綁定
??? (5):創(chuàng)建消息,并且發(fā)送到隊列中
? ?? 注意,在我們當前的例子中,并沒有用到exchange交換機,RabbitMQ默認情況下是會創(chuàng)建一個空字符串名字的exchange的,如果我們沒有創(chuàng)建自己的exchange的話,默認就是使用的這個exchange;
???? producer端代碼:
?
[java]?view plain
?copy public?class?Sender?{??????private?final?static?String?QUEUE_NAME?=?"MyQueue";????????????public?static?void?main(String[]?args)?{??????????send();??????}????????????public?static?void?send()??????{??????????ConnectionFactory?factory?=?null;??????????Connection?connection?=?null;??????????Channel?channel?=?null;??????????try?{??????????????factory?=?new?ConnectionFactory();??????????????factory.setHost("localhost");??????????????connection?=?factory.newConnection();??????????????channel?=?connection.createChannel();??????????????channel.queueDeclare(QUEUE_NAME,?false,?false,?false,?null);??????????????String?message?=?"my?first?message?.....";??????????????channel.basicPublish("",?QUEUE_NAME,?null,?message.getBytes("UTF-8"));??????????????System.out.println("已經(jīng)發(fā)送消息....."+message);??????????}?catch?(IOException?e)?{??????????????e.printStackTrace();??????????}?catch?(TimeoutException?e)?{??????????????e.printStackTrace();??????????}finally{??????????????try?{??????????????????????????????????channel.close();??????????????????connection.close();??????????????}?catch?(IOException?e)?{??????????????????e.printStackTrace();??????????????}?catch?(TimeoutException?e)?{??????????????????e.printStackTrace();??????????????}??????????}??????}??}?? ?
? ?? consumer(消費者)端步驟:
?? ? (1):創(chuàng)建ConnectionFactory,并且設置一些參數(shù),比如hostname,portNumber等等
???? (2):利用ConnectionFactory創(chuàng)建一個Connection連接
? ?? (3):利用Connection創(chuàng)建一個Channel通道
???? (4):將queue和Channel進行綁定,注意這里的queue名字要和前面producer創(chuàng)建的queue一致
? ?? (5):創(chuàng)建消費者Consumer來接收消息,同時將消費者和queue進行綁定
? ?? consumer端代碼:
?
[java]?view plain
?copy public?class?Receiver?{??????private?final?static?String?QUEUE_NAME?=?"MyQueue";????????????public?static?void?main(String[]?args)?{??????????receive();??????}????????????public?static?void?receive()??????{??????????ConnectionFactory?factory?=?null;??????????Connection?connection?=?null;??????????Channel?channel?=?null;????????????????????try?{??????????????factory?=?new?ConnectionFactory();??????????????factory.setHost("localhost");??????????????connection?=?factory.newConnection();??????????????channel?=?connection.createChannel();??????????????channel.queueDeclare(QUEUE_NAME,?false,?false,?false,?null);??????????????Consumer?consumer?=?new?DefaultConsumer(channel){??????????????????@Override??????????????????public?void?handleDelivery(String?consumerTag,?Envelope?envelope,?BasicProperties?properties,??????????????????????????byte[]?body)?throws?IOException?{??????????????????????System.out.println("11111111111");??????????????????????String?message?=?new?String(body,?"UTF-8");??????????????????????System.out.println("收到消息....."+message);??????????????????}};??????????????channel.basicConsume(QUEUE_NAME,?true,consumer);??????????}?catch?(IOException?e)?{??????????????e.printStackTrace();??????????}?catch?(TimeoutException?e)?{??????????????e.printStackTrace();??????????}finally{??????????????try?{??????????????????????????????????channel.close();??????????????????connection.close();??????????????}?catch?(IOException?e)?{??????????????????e.printStackTrace();??????????????}?catch?(TimeoutException?e)?{??????????????????e.printStackTrace();??????????????}??????????}??????}??}?? ?? 好了,這篇先到這了,下一篇我會簡單介紹點更深入的東西,后續(xù)也會對RabbitMQ原生API進行封裝,便于我們自己開發(fā);
總結
以上是生活随笔為你收集整理的:Windows下RabbitMQ安装及入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。