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