日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

:Windows下RabbitMQ安装及入门

發(fā)布時(shí)間:2025/3/19 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 :Windows下RabbitMQ安装及入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.Windows下安裝RabbitMQ需要以下幾個(gè)步驟

?? (1):下載erlang,原因在于RabbitMQ服務(wù)端代碼是使用并發(fā)式語言erlang編寫的,下載地址:http://www.erlang.org/downloads,雙擊.exe文件進(jìn)行安裝就好,安裝完成之后創(chuàng)建一個(gè)名為ERLANG_HOME的環(huán)境變量,其值指向erlang的安裝目錄,同時(shí)將%ERLANG_HOME%\bin加入到Path中,最后打開命令行,輸入erl,如果出現(xiàn)erlang的版本信息就表示erlang語言環(huán)境安裝成功;

??????????????????????

?

?? (2):下載RabbitMQ,下載地址:http://www.rabbitmq.com/,同樣雙擊.exe進(jìn)行安裝就好(這里需要注意一點(diǎn),默認(rèn)的安裝目錄是C:/Program Files/....,這個(gè)目錄中是存在空格符的,我們需要改變安裝目錄,貌似RabbitMQ安裝目錄中是不允許有空格的,我之前踩過這個(gè)大坑);

?? (3):安裝RabbitMQ-Plugins,這個(gè)相當(dāng)于是一個(gè)管理界面,方便我們?cè)跒g覽器界面查看RabbitMQ各個(gè)消息隊(duì)列以及exchange的工作情況,安裝方法是:打開命令行cd進(jìn)入rabbitmq的sbin目錄(我的目錄是:E:\software\rabbitmq\rabbitmq_server-3.6.5\sbin),輸入:rabbitmq-plugins enable rabbitmq_management命令,稍等會(huì)會(huì)發(fā)現(xiàn)出現(xiàn)plugins安裝成功的提示,默認(rèn)是安裝6個(gè)插件,如果你在安裝插件的過程中出現(xiàn)了下面的錯(cuò)誤:????????

?? 解決方法是:首先在命令行輸入:rabbitmq-service stop,接著輸入rabbitmq-service remove,再接著輸入rabbitmq-service install,接著輸入rabbitmq-service start,最后重新輸入rabbitmq-plugins enable rabbitmq_management試試,我是這樣解決的;

?? (4):插件安裝完之后,在瀏覽器輸入http://localhost:15672進(jìn)行驗(yàn)證,你會(huì)看到下面界面,輸入用戶名:guest,密碼:guest你就可以進(jìn)入管理界面,當(dāng)然用戶名密碼你都可以變的;

2.安裝完RabbitMQ之后,我們先來簡(jiǎn)單了解下RabbitMQ中涉及到的幾個(gè)概念

??? producer:消息生產(chǎn)者

??? consumer:消息消費(fèi)者

?? ? virtual host:虛擬主機(jī),在RabbitMQ中,用戶只能在虛擬主機(jī)的層面上進(jìn)行一些權(quán)限設(shè)置,比如我可以訪問哪些隊(duì)列,我可以處理哪些請(qǐng)求等等;

???? broker:消息轉(zhuǎn)發(fā)者,也就是我們RabbitMQ服務(wù)端充當(dāng)?shù)墓δ芰?#xff0c;那么消息是按照什么規(guī)則進(jìn)行轉(zhuǎn)發(fā)的呢?需要用到下面幾個(gè)概念;

? ?? exchange:交換機(jī),他是和producer直接進(jìn)行打交道的,有點(diǎn)類似于路由器的功能,主要就是進(jìn)行轉(zhuǎn)發(fā)操作的唄,那么producer到底用哪個(gè)exchange進(jìn)行路由呢?這個(gè)取決于routing key(路由鍵),每個(gè)消息都有這個(gè)鍵,我們也可以自己設(shè)定,其實(shí)就是一字符串;

???? queue:消息隊(duì)列,用于存放消息,他接收exchange路由過來的消息,我們可以對(duì)隊(duì)列內(nèi)容進(jìn)行持久化操作,那么queue到底接收那個(gè)exchange路由的消息呢?這個(gè)時(shí)候就要用到binding key(綁定鍵)了,綁定鍵會(huì)將隊(duì)列和exchange進(jìn)行綁定,至于綁定方式,RabbitMQ提供了多種方式,大家可以看看鴻洋大神的RabbitMQ博客系列(點(diǎn)擊查看);

???? 以上就是RabbitMQ涉及到的一些概念了,用一張圖表示這些概念之間的關(guān)系就是:

3.RabbitMQ簡(jiǎn)單使用

???producer(生產(chǎn)者)端步驟:

??? (1):創(chuàng)建ConnectionFactory,并且設(shè)置一些參數(shù),比如hostname,portNumber等等

??? (2):利用ConnectionFactory創(chuàng)建一個(gè)Connection連接

??? (3):利用Connection創(chuàng)建一個(gè)Channel通道

? ? (4):創(chuàng)建queue并且和Channel進(jìn)行綁定

??? (5):創(chuàng)建消息,并且發(fā)送到隊(duì)列中

? ?? 注意,在我們當(dāng)前的例子中,并沒有用到exchange交換機(jī),RabbitMQ默認(rèn)情況下是會(huì)創(chuàng)建一個(gè)空字符串名字的exchange的,如果我們沒有創(chuàng)建自己的exchange的話,默認(rèn)就是使用的這個(gè)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?{??
  • ????????????????//關(guān)閉資源??
  • ????????????????channel.close();??
  • ????????????????connection.close();??
  • ????????????}?catch?(IOException?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}?catch?(TimeoutException?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}??
  • ????????}??
  • ????}??
  • }??
  • ?

    ? ?? consumer(消費(fèi)者)端步驟:

    ?? ? (1):創(chuàng)建ConnectionFactory,并且設(shè)置一些參數(shù),比如hostname,portNumber等等

    ???? (2):利用ConnectionFactory創(chuàng)建一個(gè)Connection連接

    ? ?? (3):利用Connection創(chuàng)建一個(gè)Channel通道

    ???? (4):將queue和Channel進(jìn)行綁定,注意這里的queue名字要和前面producer創(chuàng)建的queue一致

    ? ?? (5):創(chuàng)建消費(fèi)者Consumer來接收消息,同時(shí)將消費(fèi)者和queue進(jìn)行綁定

    ? ?? 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?{??
  • ????????????????//關(guān)閉資源??
  • ????????????????channel.close();??
  • ????????????????connection.close();??
  • ????????????}?catch?(IOException?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}?catch?(TimeoutException?e)?{??
  • ????????????????e.printStackTrace();??
  • ????????????}??
  • ????????}??
  • ????}??
  • }??
  • ?? 好了,這篇先到這了,下一篇我會(huì)簡(jiǎn)單介紹點(diǎn)更深入的東西,后續(xù)也會(huì)對(duì)RabbitMQ原生API進(jìn)行封裝,便于我們自己開發(fā);

    總結(jié)

    以上是生活随笔為你收集整理的:Windows下RabbitMQ安装及入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。