RabbitMQ是流行的開源消息隊列系統,用erlang語言開發,RabbitMQ是AMQP(高級消息隊列協議)的標準實現。采用該技術,我們可以實現異步處理、流量削峰、系統解耦。
RabbitMQ 整體是一個與其他中間件相同的模型,主要是負責接收、存儲和轉發消息。可以把消息傳遞的過程想想成快遞:將一個快遞送到快遞公司,快遞公司由快遞員送到收件人的人中,RabbitMQ就類似于一個快遞公司,也就是RabbitMQ的交換機模型。
什么是消息隊列(MQ)
消息是在不同應用間傳遞的數據。這里的消息可以非常簡單,比如只包含字符串,也可以非常復雜,包含多個嵌套的對象。消息隊列(Message Queue)簡單來說就是一種應用程序間的通訊方式,消息發送后立即返回,然后由消息系統保證消息的可靠性傳輸,消息生產者只需要把消息發到MQ中就可以了,不需要關心消息的消費,同樣,消息消費者只管從MQ中拉取消息而不管是誰生產的消息,通過這樣的一個“互相不知道對象存在”模式,將消息的生產者和消息的消費者解耦了。
什么場景下考慮使用消息隊列
從上面可以知道,消息隊列是一種應用間的異步協作機制,那么我們什么時候需要用到MQ呢?
以常見的訂單系統為例,當用戶點擊「下單」后的業務邏輯可能包括:扣減庫存、生成相應訂單數據、發短信通知等。在項目和業務發展初期上面這些邏輯可能放在一起執行,隨著業務的發展訂單量的增加,需要提升系統服務的性能,此時就可以將一些不需要立即生效的操作拆分出來異步執行,比如發送短信通知等。這種場景下就可以使用MQ,在下單主流程(比如扣減庫存、生成訂單數據等)完成之后發送一條消息到MQ讓主流程快速走完,然后由另外一個線程拉取MQ的消息,執行相應的業務邏輯。這里的例子主要是用消息隊列來解耦。
RabbitMQ的特點
RabbitMQ是一個由Erlang語言開發的AMQP的開源實現。AMQP(Advanced Message Queue:高級消息隊列協議)它是應用層協議的一個開放標準,為面向消息的中間件設計,基于此協議的客戶端與消息中間件可傳遞消息,并不受產品、開發語言等條件的限制。RabbitMQ最初起源于消息系統,用于在分布式系統中存儲轉發消息,具體有如下一些特點:
- 可靠性:RabbitMQ使用一些機制來保證可靠性,比如持久化、傳輸確認機制(ack)和發布確認等。
- 靈活的路由策略:在消息進入隊列之前,通過Exchange來路由消息,對于典型的路由功能,RabbitMQ已經提供了一些內置的Exchange來實現。針對復雜的路由功能,可以將多個Exchange綁在一起,也通過插件機制實現自己的Exchange。
- 消息集群:多個RabbitMQ服務器可以組成一個集群,形成一個邏輯Broker。
- 高可用:隊列可以在集群中的集群上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。
- 多種協議:RabbitMQ支持多種消息隊列協議,比如STOMP、MQTT等。
- 多語言客戶端:RabbitMQ幾乎支持多有常用的語言,比如:JAVA、.NET等
- 管理界面:RabbitMQ提供了一個易用的用戶界面,使得用戶可以監控和管理消息Broker的許多方面。
想深入學習RabbitMQ,動力節點的視頻教程將講授RabbitMQ的環境搭建、消息的發送與接收、消息確認、與SpringBoot集成等,可以快速掌握RabbitMQ技術,以適應項目開發的需要。
RabbitMQ實戰視頻教程
https://www.bilibili.com/video/BV1Ap4y1D7tU
RabbitMQ教程配套資料下載
http://www.bjpowernode.com/?toutiao
課程學習目錄
001.RabbitMQ: 什么是消息隊列
•002.RabbitMQ: 為什么使用消息隊列
•003.RabbitMQ: RabbitMQ的特點
•004.RabbitMQ: 安裝RabbitMQ
•005.RabbitMQ: 啟動和關閉服務
•006.RabbitMQ: 插件添加
•007.RabbitMQ: 用戶管理
•008.RabbitMQ: 權限分配
•009.RabbitMQ: vhost
•010.RabbitMQ: AMQP協議機制
•011.RabbitMQ: 消息路由交換機類型
•012.RabbitMQ: Direct類型交換機
•013.RabbitMQ: Fanout類型交換機
•014.RabbitMQ: Topic類型交換機
•015.RabbitMQ: 消息發送
•016.RabbitMQ: 消息發送測試
•017.RabbitMQ: 消息接收
•018.RabbitMQ: 消息接收測試
•019.RabbitMQ: 交換機-direct-消息接收
•020.RabbitMQ: 交換機-direct-消息發送
•021.RabbitMQ: 交換機-fanout-消息接收
•022.RabbitMQ: 交換機-fanout-消息發送
•023.RabbitMQ: 交換機-topic-消息接收和發送
•024.RabbitMQ: 交換機-fanout和topic使用場景對比
•025.RabbitMQ: 事務性消息發送
•026.RabbitMQ: 事務性消息接收
•027.RabbitMQ: 發送者確認模式-普通確認
•028.RabbitMQ: 發送者確認模式-批量確認
•029.RabbitMQ: 發送者確認模式-異步確認
•030.RabbitMQ: 消費者確認模式-手動確認消息
•031.RabbitMQ: 消費者確認模式-事務對接收的影響以及防重復處理
•032.RabbitMQ: SpringBoot集成RabbitMQ-direct發送消息
•033.RabbitMQ: SpringBoot集成RabbitMQ-direct接收消息
•034.RabbitMQ: SpringBoot集成RabbitMQ-異步監聽接收消息
•035.RabbitMQ: SpringBoot集成RabbitMQ-fanout接收消息
•036.RabbitMQ: SpringBoot集成RabbitMQ-fanout發送消息
•037.RabbitMQ: SpringBoot集成RabbitMQ-topic發送和接收消息
•038.RabbitMQ: 集群-集群模式介紹
•039.RabbitMQ: 集群-環境搭建
•040.RabbitMQ: 集群-配置集群
•041.RabbitMQ: 集群-SpringBoot鏈接集群
•042.RabbitMQ: 集群-鏡像集群配置