天天看點

RabbitMQ入門認識歡迎來到我的部落格中心核心元件

歡迎來到我的部落格中心

你好! 這是我作為一個程式員第一次寫部落格 ,主要是我初步認識RabbitMQ,在學習過程中所總結,主要是用來做個筆記希望可以後期的不斷完善。

RabbitMQ是什麼

RabbitMQ是一個由erlang開發的AMQP,在高可用,易用性,擴充性方面表現不俗,MQ的意思可以了解為消息隊列,隊列可以了解為一條條的管子,消息在管子中進行傳遞,

比如:一個項目 有兩個系統,一個是使用者中心(主要是管理使用者的權限等資訊,)一個是功能型,主要是業務,以及流程,那麼使用者是在使用者中心申請賬号,建立賬戶 權限 密碼等,舉個修改頭像的例子來來說 ,使用者中心建立了賬戶資訊,使用者要在使用者中心修改頭像,那麼如何讓功能性的那個項目同步,這裡就用到了MQ.

還有就是我們在雙11的時候,當我們淩晨大量的秒殺和搶購商品,然後去結算的時候,就會發現,界面會提醒我們,讓我們稍等,以及一些友好的圖檔文字提醒。而不是像前幾年的時代,動不動就頁面卡死,報錯等來呈現給使用者。綜合就是也是提供了異步操作 讓他去排隊 然後執行

核心元件

  1. Message :消息,消息是不具名的,它由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對于其他消息的優先權)、delivery-mode(指出該消息可能需要持久性存儲)等。
  2. Publisher:消費的生産者,也是一個向交換器釋出消息的客端應用程式;消息釋出到交換器然後通過交換器放入到綁定的Queues
  3. Exchange:交換器,用來接收生産者發送的消息,并将這些消息路由給伺服器的隊列中 ,Exchange有四中類型,direct:點對點,通過Routing key單點傳播; fanout:廣播,無須寫Routing key直接釋出到目前交換機下所有的隊列中;topic:通過主題,提供了通配符的比對如*和#,來進行釋出到具體的隊列:如;一個隊列是zhangyang.emp 那麼他的route key 為zhangyang.# 或者zhangyang.*釋出的消息zhangyang.emp都可以接收到:headers: 消息發送時可以在header中定義一些鍵值對,接收消息隊列與headers轉發器綁定時可以指定鍵值對,all、any兩種方式(隊列綁定轉發器時指定的鍵值對與headers中存儲的鍵值對比對),比對上即可接收到消息
  4. Queue:消息隊列,用來儲存消息發送給消費者,他是消息的容器,也是消息的終點,消息可以同時存入一個或者多個隊列,消息會一直在這個隊列裡,等待消費者連接配接這個隊列
  5. Binding:使用者綁定隊列,在交換機中可以看到,用于消息隊列和交換器之間的關聯,一個交換器可以綁定多個隊列,但是Exchange和Queuc的綁定也可以是多對多的關系
  6. Connection:網絡連接配接,如何一個TCP連接配接
  7. Channel:信道,多路複用連接配接中的一條獨立的雙向資料流通道。信道是建立在真實的TCP連接配接内的虛拟連接配接,AMQP 指令都是通過信道發出去的,不管是釋出消息、訂閱隊列還是接收消息,這些動作都是通過信道完成。因為對于作業系統來說建立和銷毀 TCP 都是非常昂貴的開銷,是以引入了信道的概念,以複用一條 TCP 連接配接。
  8. Consumer:消息的消費者,通俗的講就是你要從隊列裡取資料了
  9. Virtual Host:虛拟主機,表示一批交換器,消息隊列和相關對象。虛拟主機是共享相同的身份認證和加密環境的獨立伺服器域。每個 vhost 本質上就是一個 mini 版的 RabbitMQ 伺服器,擁有自己的隊列、交換器、綁定和權限機制。vhost 是 AMQP 概念的基礎,必須在連接配接時指定,RabbitMQ 預設的 vhost 是 / 。
  10. Broker:表示消息隊列伺服器實體

這裡我用docker裝一個RabbitMQ作為一個入門

1,首先docker确定先安裝上 然後通過docker的指令 來查詢RabbitMQ的鏡像,然後下載下傳這裡我用了鏡像加速下載下傳:

鏡像加速位址https://www.docker-cn.com/registry-mirror

RabbitMQ入門認識歡迎來到我的部落格中心核心元件

2,然後通過docker images 檢視本機的鏡像然後運作RabbitMQ鏡像 ,并且在浏覽器中通路,預設賬戶guest 密碼guest

RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件

-d:背景運作 -p 提供端口的映射 5672:主機的5672映射到docker容器的5672,這是用戶端RabbitMQ通信的端口 15672是管理頁面通路WEB頁面的端口 --name為這個容器起個名字 最後是鏡像ID

到了這裡就算是完成了 你可以登陸進去看到一些預設的配置項比如 Virtual Host預設主機,Exchanage預設的交換機 和Queues等等 這裡不再說了 自己可以去看

RabbitMQ入門認識歡迎來到我的部落格中心核心元件

3,我們建立幾個交換機和隊列 并且為之綁定,點選到Exchange位址欄,然後點選add a new change 注意:Durability選為durable下次啟動的時候還是存在的不然就沒了分别建立topic,fanout,direct交換機;

RabbitMQ入門認識歡迎來到我的部落格中心核心元件

注意那個type:是direct,topic和fanout

4,建立隊列,這裡建立四個為例

RabbitMQ入門認識歡迎來到我的部落格中心核心元件

5,為交換機綁定隊列

exchange.direct的綁定
           
RabbitMQ入門認識歡迎來到我的部落格中心核心元件
exchange.fanout的綁定
           
RabbitMQ入門認識歡迎來到我的部落格中心核心元件
exchange.topic的綁定
           
RabbitMQ入門認識歡迎來到我的部落格中心核心元件

6,建立一個spring boot項目測試

導入RabbitMQ依賴 然後為了使傳回的資料更加看起來周遊這裡用到一個配置類 具體如下

RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件

7,測試RabbitMQ點對點的傳播 就是exchange.direct

代碼執行後首先是zhangyang這個隊列的裡面消息數量增加了1 然後點選這個隊列然後點選下getMessage可以看到資訊

RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件

8,測試廣播模式 就是exchange.fanout

代碼執行所有他綁定的隊列都會增加一條消息**

RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件

9,測試exchange.topic,通配符下消息的釋出

注意看上一步的zhangyang.eat是 1 現在為2 route key 是*.eat

RabbitMQ入門認識歡迎來到我的部落格中心核心元件
RabbitMQ入門認識歡迎來到我的部落格中心核心元件

最後我們在補充點

在dockers安裝的RabbitMQ再次啟動的時候是 docker restart myrabbitMQ 一定要是restart 别docker run myrabbitMQ

@Autowired
AmqpAdmin amqpAdmin; //提供代碼操作建立删除交換機 隊列  綁定隊列的功能

@Test
public void createExchange(){
    //建立交換機
           

// amqpAdmin.declareExchange(new DirectExchange(“amqpadmin.exchange”));

// System.out.println(“建立完成”);

//建立一個隊列

// amqpAdmin.declareQueue(new Queue(“amqpadmin.quee”,true));

// System.out.println(“建立成功”);

amqpAdmin.declareBinding(new Binding(“amqpadmin.quee”,Binding.DestinationType.QUEUE,“amqpadmin.exchange”,“amqp.haha”,null));

}

這個僅僅是一個入門 windows下的RabbitMQ比較簡單安裝 不過安裝之前一定要先安裝erlang 不然MQ就挂了 ,還有很多API都需要操作正規的開發項目是有一個listener監聽的 隻要消息一釋出 消費者端就能查詢到

RabbitMQ入門認識歡迎來到我的部落格中心核心元件

這個入門算是暫時完成了我也是在部署項目的時候覺得這個MQ 挺有意思的而且很重要 是以經過主管的提點 和自己的學習适當的入門了下 第一次寫 寫的不好 不足之處 如果有人看到 希望可以給予一定的批評建議 學習之路任重而道遠,我也希望自己做一個合格的工程師