Linux安裝RabbitMQ並整合SpringBoot簡單使用


  過多的描述就不扯了,本文主要記錄RabbitMQ的安裝以及簡單使用。本次安裝是為了實現spring cloud的消息總線:SpringCloud全家桶學習之消息總線---SpringCloud Bus

一、RabbitMQ安裝

1.下載Erlang的rpm包

  RabbitMQ是Erlang語言編寫,所以Erang環境必須要有,注:Erlang環境一定要與RabbitMQ版本匹配:https://www.rabbitmq.com/which-erlang.html

  Erlang下載地址:https://www.rabbitmq.com/releases/erlang/(根據自身需求及匹配關系,下載對應rpm包)

2.下載RabbitMQ的rpm包

  RabbitMQ下載地址:https://www.rabbitmq.com/releases/rabbitmq-server/(根據自身需求及匹配關系,下載對應rpm包)

3.下載socat的rpm包

  rabbitmq安裝依賴於socat,所以需要下載socat。

  socat下載地址:http://repo.iotti.biz/CentOS/6/x86_64/socat-1.7.3.2-1.el6.lux.x86_64.rpm

  根據自身需求下載對應系統socat依賴:(http://repo.iotti.biz/CentOS/)

4.分別安裝Erlang、Socat、RabbitMQ(一定按照順序!)

  一定按照以下順序安裝

  ①rpm -ivh erlang-18.3-1.el6.x86_64.rpm

  ②rpm -ivh socat-1.7.3.2-1.el6.lux.x86_64.rpm

  ③rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm 

5.配置rabbitmq:vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app

  

 6.安裝管理插件:rabbitmq-plugins enable rabbitmq_management

 6.啟動RabbitMQ,瀏覽器訪問:http://192.168.64.128:15672/,出現以下界面說明安裝完成!

  ①cd /usr/lib/rabbitmq/bin

  ②./rabbitmq-server start

二、工作模型

  當producer(consumer)要生產(消費)消息時,需要與服務器建立一個長連接,在RabbitMQ中稱為Connection,為解決客戶端與服務端所產生頻繁連接的問題,由於會大量的消耗服務器內存,這里引入消息通道的概念,在保持長連接的情況下,可以通過建立Channel的方式與服務器通訊,當有請求時就會建立通道,結束則關閉通道。在RabbitMQ中,一般的做法不會讓消息直接發送到消息隊列中,這里引入了Exchange(交換機)的概念,通過交換機來實現消息更加靈活的分發,交換機沒有實際的進程,而隊列是有的,它只是一個地址列表,在隊列創建的時候會與Exchange綁定一個專屬的key,在生產者生產消息的時候也會指定這個key,那么Exchange就會通過這個key去匹配Queue,從而實現靈活分發。然后消費方會通過訂閱指定的隊列去消費消息。在RabbitMQ中有Virtual Host虛擬機的概念,它可以當成是一個小型的MQ,一個RabbitMQ服務器上可以有多個虛擬機,相互之間是隔離的,當然不同的虛擬機之間可以有相同的交換機與隊列,可以實現資源的隔離。

三、RabbitMQ的5種模式

1、簡單模式(一對一的發送)

 

 ①生產者發送消息給交換機

②交換機接收消息,如果交換機沒有綁定隊列,消息扔進垃圾桶

③隊列接收消息,存儲在內存,等待消費者連接監聽獲取消息,消費成功后,返回確認

一些場景:短信,QQ

2、工作模式(資源的爭搶)

 

 ①生產者將消息發送給交換機

②交換機發送給綁定的后端隊列

③一個隊列被多個消費者同時監聽,形成消息的爭搶結構:根據消費者所在的系統的空閑、性能爭搶隊列中的消息

一些場景:搶紅包

3、發布訂閱(交換機類型為fanout)

 

 注:圖中未畫消費者

①交換機定義類型為:fanout

②交換機綁定多個隊列

③生產者將消息發送給交換機,交換機復制同步消息到后端所有的隊列中

一些場景:郵件群發

4、路由模式(交換機類型:direct)

 

①交換機定義類型為:direct

②交換機綁定多個隊列,隊列綁定交換機時,給交換機提供了一個routingkey(路由key)

③發布訂閱時,所有fanout類型的交換機綁定后端隊列用的路由key都是“”;在路由模式中需要綁定隊列時提供當前隊列的具體路由key

一些場景:錯誤消息的接收和提示

5、主題模式(交換機類型:topic)

 

①交換機定義類型為:topic

②交換機綁定多個隊列,與路由模式非常相似,做到按類划分消息

③路由key隊列綁定的通配符如下:#表示任意字符串,*表示沒有特殊符號(單詞)的字符串

四、RabbitMQ整合至SpringBoot

1、項目准備  

  producer端、consumer端代碼地址:https://github.com/Simple-Coder/rabbitmq

2、直連型交換機Exchange

  訪問http://192.168.56.100:15672,查看rabbtimq的管理頁面,看到消息推送成功

再看看隊列顯示已經推送到隊列中

 

直連交換機是一對一,那如果咱們配置多台監聽綁定到同一個直連交互的同一個隊列,會怎么樣?

可以看到是實現了輪詢的方式對消息進行消費,而且不存在重復消費。

3、主題交換機Exchange

3.1 top測試

TopicManReceiver監聽隊列1,綁定鍵為:topic.man
TopicTotalReceiver監聽隊列2,綁定鍵為:topic.#
而當前推送的消息,攜帶的路由鍵為:topic.man

可以看到兩個監聽消費者receiver都成功消費到了消息,因為這兩個recevier監聽的隊列的綁定鍵都能與這條消息攜帶的路由鍵匹配上。

 3.2 topic主題測試

  調用接口/sendTopicMessage2。

  TopicManReceiver監聽隊列1,綁定鍵為:topic.man
  TopicTotalReceiver監聽隊列2,綁定鍵為:topic.#
  而當前推送的消息,攜帶的路由鍵為:topic.woman

  所以可以看到兩個監聽消費者只有TopicTotalReceiver成功消費到了消息

4、fanout Exchange扇型交換機

 可以看到只要發送到 fanoutExchange 這個扇型交換機的消息, 三個隊列都綁定這個交換機,所以三個消息接收類都監聽到了這條消息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM