RabbitMQ原理和架構圖解(附6大工作模式)
為什麼要使用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將按順序將每條訊息傳送給下一個消費者,平均而言,每個消費者將獲得相同數量的訊息,這種分發訊息的方式稱為迴圈法。
以上
作者簡介
陳睿| ,10年+大廠架構經驗,《BAT架構技術500期》系列文章作者,專注於網際網路架構技術。
閱讀mikechen的網際網路架構更多技術文章合集
| | | | | |
關注「mikechen 的網際網路架構」公眾號,回覆 【架構】領取 《Java進階架構思維導圖&Java進階架構文章合集》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011997/viewspace-2916680/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RabbitMQ架構詳解(7大架構原理模型圖解)MQ架構模型圖解
- 瞭解ansible架構與工作原理架構
- RabbitMQ 元件和架構MQ元件架構
- Kafka 架構和原理機制 (圖文全面詳解)Kafka架構
- [系統架構] AKKA工作原理架構
- RabbitMQ系列(二)深入瞭解RabbitMQ工作原理及簡單使用MQ
- 圖解WebGL和Three.js工作原理圖解WebJS
- storm 架構和原理ORM架構
- Nginx 原理和架構Nginx架構
- RabbitMQ從零到叢集高可用(.NetCore5.0) - RabbitMQ簡介和六種工作模式詳解MQNetCore模式
- Struts2工作原理(圖解)圖解
- 圖解 Kubernetes 架構圖解架構
- GPIO口工作原理的超詳細解釋(附電路圖)
- RabbitMQ系列(六)你不知道的RabbitMQ叢集架構全解MQ架構
- rabbitmq原理和應用MQ
- 面試官:RabbitMQ有哪些工作模式?面試MQ模式
- RabbitMQ 使用場景、安裝、工作模式MQ模式
- 詳解工作流框架Activiti的服務架構和元件框架架構元件
- 圖解分散式架構的發展和演進圖解分散式架構
- 圖解高效能網路架構:Reactor 和 Proactor圖解架構React
- 圖解架構 | SaaS、PaaS、IaaS圖解架構
- 長文圖解:詳解金字塔原理如何應用於架構設計圖解架構
- HashMap原理(一) 概念和底層架構HashMap架構
- 解決方案架構、系統架構和企業架構區別架構
- 架構師的工作架構
- ERP原理 | 業財一體化的幾種架構模式架構模式
- 10張架構圖詳解資料中臺,附全套資料中臺PPT架構
- 軟體架構五大模式詳解架構模式
- 詳解Oracle架構、原理、程式,學會世間再無複雜架構Oracle架構
- 圖文詳解 HDFS 的工作機制及其原理
- 阿里架構師,講述基於微服務的軟體架構模式(附資料)阿里架構微服務模式
- React Fiber架構原理React架構
- RocketMQ(1)-架構原理MQ架構
- HDFS架構及原理架構
- 深入HBase架構原理架構
- MySQL原理簡介—2.InnoDB架構原理和執行流程MySql架構
- tomcat + spring mvc 原理(一):tomcat原理綜述和靜態架構TomcatSpringMVC架構
- 極簡架構模式-MVC模式架構模式MVC