RabbitMQ 簡(jiǎn)介

1. 前言
大家好,今天讓我們開始一個(gè)新專題 — RabbitMQ。提起 RabbitMQ ,相信大家并不是很陌生,在基于任何一種語(yǔ)言框架所開發(fā)的項(xiàng)目中,大大小小都有可能用到。關(guān)于 RabbitMQ ,想必使用過(guò)的同學(xué)都有所耳聞,它的知識(shí)點(diǎn)完全可以出一本書來(lái)專門進(jìn)行介紹,如果單靠本專題是介紹不完的。
本專題我們重點(diǎn)介紹 RabbitMQ 中的基本概念語(yǔ)法、基本術(shù)語(yǔ)、基本使用方法等一系列基本內(nèi)容,不會(huì)涉及到很高級(jí)的用法。
在將基本內(nèi)容全部講解完畢后,我會(huì)結(jié)合我的經(jīng)驗(yàn)以一個(gè)完整項(xiàng)目的形式,來(lái)為大家?guī)?lái)企業(yè)級(jí) RabbitMQ 實(shí)戰(zhàn)內(nèi)容,旨在幫助大家,在掌握 RabbitMQ 基本知識(shí)體系之后,可以真正地將 RabbitMQ 應(yīng)用到自己的實(shí)際工作中去。
本文我們主要先介紹一下 RabbitMQ 是什么?有哪些特性??jī)?yōu)缺點(diǎn)在哪?為什么我們需要在項(xiàng)目開發(fā)中應(yīng)用 RabbitMQ ?
2. 什么是 RabbitMQ ?
什么是 RabbitMQ 呢?在 RabbitMQ 官網(wǎng)中是這么介紹的:
一場(chǎng)使用消息進(jìn)行通信的高可用和數(shù)據(jù)安全的在線會(huì)議. —官網(wǎng)
上述定義是官網(wǎng)的抽象描述,添加了一些官網(wǎng)的色彩在里面,同學(xué)們可能不太理解,下面我對(duì)定義進(jìn)行一些必要的解釋。
通俗來(lái)講,我們可以這樣理解:RabbitMQ 是一種消息通信方式,采用消息隊(duì)列的形式,來(lái)將消息進(jìn)行傳遞與發(fā)送,RabbitMQ 在通過(guò)消息隊(duì)列傳遞消息時(shí),可以保證消息的高可用性、消息中數(shù)據(jù)的安全性。
也就是說(shuō),RabbitMQ 是一種高可用且數(shù)據(jù)安全的消息通信中間件。
3. 為什么要使用 RabbitMQ
那么我們?yōu)槭裁匆褂?RabbitMQ 呢?
3.1 通俗易懂的配置項(xiàng)
RabbitMQ 這一中間件并不像 Hystrix 那樣,如果需要使用,就要先進(jìn)行集成。RabbitMQ 本身是依賴于 erlang 語(yǔ)言,并不是 Java 語(yǔ)言,所以,如果我們的電腦上具備了 erlang 語(yǔ)言的環(huán)境,就可以使用 RabbitMQ 了,這一點(diǎn)是 Hystrix 等其他工具不具備的特性。
正是由于上述特性存在的原因,所以,RabbitMQ 的使用就相當(dāng)靈活。由于本套教程是依賴于 Spring Boot 框架來(lái)介紹 RabbitMQ 的,所以,我們需要將 RabbitMQ 集成到 Spring Boot 框架中去。
RabbitMQ 針對(duì)不同的集成環(huán)境,提供了很多種不同的集成實(shí)現(xiàn)方案,而無(wú)論是哪一種集成方案,其配置項(xiàng)都不是很多,我們只需要將最基本的幾個(gè)主要配置項(xiàng)進(jìn)行簡(jiǎn)單配置,就可以使用 RabbitMQ 了。
在將 RabbitMQ 依賴引入到項(xiàng)目中后,由于 Spring Boot 框架的特性,我們不需要進(jìn)行繁瑣的 xml 文件的配置,只需要將和 RabbitMQ 相關(guān)的配置項(xiàng)以一個(gè)配置類的形式,或直接將其配置到配置源文件中去即可。
3.2 安全可靠的投遞性
RabbitMQ 在進(jìn)行消息傳遞的時(shí)候,會(huì)在其容器中進(jìn)行一些必要的檢測(cè),來(lái)保證消息間通信的可靠性,具體 RabbitMQ 是怎樣進(jìn)行消息間通信的檢測(cè)的,我們?cè)诒咎渍n程中就不再介紹了,因?yàn)檫@涉及到 RabbitMQ 的底層實(shí)現(xiàn),和課程初衷是不符的。
現(xiàn)在我們只需要這樣理解就行了:當(dāng)我們將一條消息放入到 RabbitMQ 中時(shí),RabbitMQ 首先會(huì)檢測(cè)消息所處的環(huán)境,然后 RabbitMQ 會(huì)將該條消息通過(guò)一定的加密算法進(jìn)行加密,最后,通過(guò) RabbitMQ 的消息通道,將消息投遞到它該去的地方。
3.3 近于實(shí)時(shí)的補(bǔ)償性
我們都知道,什么事情都不可能是十全十美的。拋開 RabbitMQ 不說(shuō),在互聯(lián)網(wǎng)行業(yè)中的其他工具,也不能百分百保證每時(shí)每刻都在正常工作,更何況是涉及到消息通信的工具。RabbitMQ 在傳遞消息時(shí),由于一些客觀原因或者是其本身的原因,可能會(huì)出現(xiàn),在有大批量消息傳遞時(shí),所有的消息不能百分百傳遞到目的地的問(wèn)題。
RabbitMQ 在設(shè)計(jì)之初就考慮到了這個(gè)問(wèn)題的出現(xiàn),所以,RabbitMQ 提供了內(nèi)置的消息補(bǔ)償機(jī)制,這里我們簡(jiǎn)單做一下介紹。
當(dāng)存在大批量的消息都需要經(jīng)過(guò) RabbitMQ 來(lái)投遞時(shí),RabbitMQ 會(huì)將這些消息劃分成若干組,然后通過(guò)為組設(shè)置順序的方式,來(lái)依次投遞這些消息。如果在任意一組中,出現(xiàn)了消息未能投遞到目的地的現(xiàn)象,那么, RabbitMQ 會(huì)將該條消息進(jìn)行短暫的存儲(chǔ),待其他消息都到達(dá)目的地后,RabbitMQ 會(huì)重新將該條消息進(jìn)行投遞,然而,這個(gè)過(guò)程執(zhí)行的時(shí)間是微乎其微的,幾乎近于實(shí)時(shí)。
3.4 考慮周全的監(jiān)控性
在進(jìn)行消息間投遞工作時(shí),如果能夠在后臺(tái)監(jiān)控到每條消息的投遞狀況,想必是再好不過(guò)了。
鑒于此,RabbitMQ 為我們內(nèi)置了消息監(jiān)控臺(tái),RabbitMQ 內(nèi)置的消息監(jiān)控臺(tái)可以看到每一條消息的健康情況,其為我們提供了圖表形式、表格形式等,來(lái)很好地為我們展示每條信息地投遞狀況,包括但不限于:消息何時(shí)發(fā)送的、使用的是哪個(gè)通道、消息何時(shí)被接收的等關(guān)鍵監(jiān)控屬性,可以很好地為我們監(jiān)控每條消息地投遞情況。
總結(jié):
RabbitMQ 其實(shí)就是為了解決消息間通信而誕生的一款消息中間件,其依賴于 erlang 語(yǔ)言,并廣泛應(yīng)用于 Spring Boot 框架,通過(guò)提供一系列必要的消息保障機(jī)制,來(lái)保證消息間可以安全可靠的進(jìn)行通信。
4. RabbitMQ 的版本說(shuō)明
RabbitMQ 從 2006 年誕生,到現(xiàn)在已經(jīng)有 14 個(gè)年頭了,在這中間已經(jīng)迭代升級(jí)了很多版本,目前,最新的版本是 v3.8.8,每個(gè)版本都有不同的特性,下面介紹一個(gè)主要使用的版本和新版本的特性。
-
V3.5.X - 3.6.X:RabbitMQ 最初的流行版本,也是互聯(lián)網(wǎng)公司最早采用的版本,現(xiàn)在還有一部分互聯(lián)網(wǎng)公司在使用;
-
V3.6.X - 3.7.X: 互聯(lián)網(wǎng)公司普遍使用的版本,也是使用人數(shù)較多的版本,較之前版本而言,對(duì)一些內(nèi)置的特性做了優(yōu)化;
-
V3.8.X: 目前發(fā)布的最新系列版本,也是大廠用的最多的版本,最新版本于 2020 年 9 月 3 日發(fā)布,最新版本較之前發(fā)布的版本更好用、更穩(wěn)定、配置更靈活。
Tips: 鑒于此,本套課程采用 V3.8.5 版本進(jìn)行講解,請(qǐng)同學(xué)們務(wù)必和老師所使用的版本保持一致,以避免后續(xù)因?yàn)榘姹径鸬牟槐匾膯?wèn)題,以及一些兼容性問(wèn)題。
5. RabbitMQ 的優(yōu)點(diǎn)
-
配置簡(jiǎn)單 : 支持通過(guò)配置類、yml 配置源文件的形式來(lái)對(duì) RabbitMQ 進(jìn)行配置。
-
安全可靠 : 提供了豐富的消息保障措施,例如,消息加密、消息投遞補(bǔ)償、消息檢測(cè)等,保證我們消息間安全可靠地投遞。
-
監(jiān)控周全 : 提供了豐富的后臺(tái)監(jiān)控策略,通過(guò)不同的表現(xiàn)方式,來(lái)為我們提供消息的健康狀況,方便我們監(jiān)控。
6. RabbitMQ 的缺點(diǎn)
-
有一定的不穩(wěn)定性 : 經(jīng)過(guò)長(zhǎng)時(shí)間的使用可以得出,RabbitMQ 有時(shí)會(huì)出現(xiàn)消息補(bǔ)償不及時(shí)、發(fā)送通道卡死等現(xiàn)象,但這不是經(jīng)常發(fā)生的。
-
速度還不是最快的 : 一般而言,RabbitMQ 本身的消息投遞速度已經(jīng)可以滿足現(xiàn)實(shí)工作中絕大多數(shù)業(yè)務(wù)場(chǎng)景,在遇到復(fù)雜的業(yè)務(wù)場(chǎng)景時(shí),比如,一次需要傳遞上萬(wàn)條數(shù)據(jù)時(shí),消息間通信的速度可能就會(huì)達(dá)不到預(yù)期了,就需要我們對(duì)消息傳遞進(jìn)行優(yōu)化。
7. 學(xué)習(xí)基礎(chǔ)
-
學(xué)習(xí)本門課程,首先需要對(duì) Java 的 Spring Boot 框架有較為熟練的使用經(jīng)驗(yàn),并對(duì) Maven 有一定的了解。
-
對(duì) RabbitMQ 感興趣的同學(xué),或者對(duì) RabbitMQ 消息中間件有簡(jiǎn)單了解或使用的同學(xué)。
-
知道什么是消息,并對(duì)消息間通信的基本概念有簡(jiǎn)單了解。
8. 總結(jié)

本小節(jié)詳細(xì)介紹了 RabbitMQ 這一消息中間件,從 RabbitMQ 的定義開始,到 RabbitMQ 不同版本間特性差異的闡述,再到最后 RabbitMQ 的優(yōu)缺點(diǎn)總結(jié)對(duì)比。
希望沒(méi)有接觸過(guò) RabbitMQ 的同學(xué),通過(guò)對(duì)本節(jié)內(nèi)容的學(xué)習(xí)可以簡(jiǎn)單了解什么是 RabbitMQ ,以及它能為我們做哪些事情,本篇是整套課程的開端,希望各位同學(xué)能夠持續(xù)關(guān)注,謝謝。