

為什么要使用RabbitMQ?
1.解耦
系統A在代碼中直接呼叫系統B和系統C的代碼,如果將來D系統接入,系統A還需要修改代碼,過于麻煩,
2.異步
將訊息寫入訊息佇列,非必要的業務邏輯以異步的方式運行,加快回應速度,
3.削峰
并發量大的時候,所有的請求直接懟到資料庫,造成資料庫連接例外,
RabbitMQ原理和架構
RabbitMQ的技術架構如下圖所示:

1.生產者(Publisher)
發訊息到RabbitMQ中的(Exchange)交換機上,
2.交換機(Exchange)
和生產者建立連接并接收生產者發來的訊息
3.消費者(Consumer)
監聽RabbitMQ中的(Queue)佇列中的訊息
4.佇列(Queue)
Exchange將訊息發送到指定的Queue中,Queue和消費者進行互動
5.路由(Routes)
交換機轉發訊息到佇列的規則
RabbitMQ的核心概念
1)Broker
Broker,簡單來說就是訊息佇列服務器物體,
2)Exchange
Exchange(訊息交換機),它指定訊息按什么規則,路由到哪個佇列,
3)Queue
Queue(訊息佇列載體),每個訊息都會被投入到一個或多個佇列,
4)Binding
Binding(系結),它的作用就是把exchange和queue按照路由規則系結起來,
5)Routing Key
Routing Key(路由關鍵字),exchange根據這個關鍵字進行訊息投遞;
6)VHost
vhost 可以理解為虛擬 broker ,即 mini-RabbitMQ server,其內部均含有獨立的 queue、exchange 和 binding 等,但最最重要的是,其擁有獨立的權限系統,可以做到 vhost 范圍的用戶控制,當然,從 RabbitMQ 的全域角度,vhost 可以作為不同權限隔離的手段(一個典型的例子就是不同的應用可以跑在不同的 vhost 中);
7)Producer
Producer(訊息生產者),就是投遞訊息的程式;
8)Consumer
Consumer(訊息消費者),就是接受訊息的程式;
9)Channel
Channel(訊息通道),在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務,
RabbitMQ 的作業模式?
RabbitMQ提供了6種模式:
1、簡單模式

生產者,一個佇列一個或多個消費者,當多個消費者同時監聽一個佇列時,他們并不能同時消費一條訊息,而是隨機消費訊息,即一個佇列中一條訊息,只能被一個消費者消費,
2、主題模式(topic)

生產者,一個交換機(topicExchange),模糊匹配路由規則,多個佇列,多個消費者,
3、訂閱與發布模式(fanout)

生產者,一個交換機(fanoutExchange),沒有路由規則,多個佇列,多個消費者,生產者將訊息不是直接發送到佇列,而是發送到X交換機,然后由交換機發送給兩個佇列,兩個消費者各自監聽一個佇列,來消費訊息,
4、路由模式(direct)

生產者,一個交換機(directExchange),路由規則,多個佇列,多個消費者,主要根據定義的路由規則決定訊息往哪個佇列發送,
5、RPC模式
對于RPC請求,客戶端發送一條帶有兩個屬性的訊息:replyTo,設定為僅為請求創建的匿名獨占佇列,和correlationId,設定為每個請求的唯一id值,請求被發送到rpc_queue佇列,RPC作業行程在佇列上等待請求,當一個請求出現時,它執行任務,并使用replyTo欄位中的佇列將結果發回客戶機,客戶機在回應訊息佇列上等待資料,當訊息出現時,它檢查correlationId屬性,如果匹配請求中的值,則向程式回傳該回應資料,
6、作業佇列

注釋:默認情況下,RabbitMQ將按順序將每條訊息發送給下一個消費者,平均而言,每個消費者將獲得相同數量的訊息,這種分發訊息的方式稱為回圈法,
以上
作者簡介
陳睿|mikechen,10年+大廠架構經驗,《BAT架構技術500期》系列文章作者,專注于互聯網架構技術,
閱讀mikechen的互聯網架構更多技術文章合集
Java并發|JVM|MySQL|Spring|Redis|分布式|高并發
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509809.html
標籤:其他
