第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

RabbitMQ 入門教程

RabbitMQ 簡(jiǎn)介
RabbitMQ 簡(jiǎn)介
首頁 慕課教程 RabbitMQ 入門教程 RabbitMQ 入門教程 使用RabbitMQ打造扛得住的高并發(fā)環(huán)境(二)

使用RabbitMQ打造扛得住的高并發(fā)環(huán)境(二)

1. 前言

Hello,大家好。我們?cè)谏弦恍」?jié)中,介紹了使用 RabbitMQ 打造扛得住的高并發(fā)環(huán)境系列內(nèi)容的第一小節(jié)部分,也就是我們的準(zhǔn)備內(nèi)容。

本小節(jié)會(huì)繼續(xù)介紹使用 RabbitMQ 打造扛得住的高并發(fā)環(huán)境系列內(nèi)容的第二部分,在本小節(jié)中,我們會(huì)使用我們?cè)诘谝还?jié)中安裝好的 Redis 緩存中間件,結(jié)合 RabbitMQ 消息通信中間件,來完成我們此系列小節(jié)內(nèi)容的核心部分。

在將此系列小節(jié)內(nèi)容的核心部分完成之后,我們?cè)诖讼盗凶詈笠恍」?jié)中就會(huì)用到我們搭建的核心部分,下面就讓我們來看看這一核心內(nèi)容到底是什么吧!

本節(jié)主要內(nèi)容:

  • RabbitMQ 整合 Redis 概述;

  • RabbitMQ + Redis 打造高可用消息隊(duì)列概述。

2.RabbitMQ 整合 Redis 概述

RabbitMQ 消息通信中間件,整合 Redis 緩存中間件,這一整合集成方案,已經(jīng)是計(jì)算機(jī)業(yè)界主流的解決方案,該方案的誕生目的,或者說是主要目標(biāo),就是解決一般高并發(fā)場(chǎng)景下的請(qǐng)求激增而引發(fā)的服務(wù)器壓力過大或服務(wù)器宕機(jī)的問題。

RabbitMQ 與 Redis 的整合解決方案,經(jīng)過了計(jì)算機(jī)業(yè)界常年的應(yīng)用考核,以及計(jì)算機(jī)互聯(lián)網(wǎng)大廠中,實(shí)際高并發(fā)真實(shí)業(yè)務(wù)場(chǎng)景的考核,這一整合方案的應(yīng)用,各互聯(lián)網(wǎng)大廠以及業(yè)界前輩,為我們積累了寶貴的實(shí)戰(zhàn)經(jīng)驗(yàn)。

RabbitMQ 消息通信中間件,整合 Redis 緩存中間件,這一整合集成方案發(fā)展到現(xiàn)在,已經(jīng)演進(jìn)出了很多經(jīng)典的實(shí)現(xiàn)方式,為不同的問題提供了不同的解決方案,本小節(jié)會(huì)介紹這一整合方案中最基礎(chǔ)的實(shí)現(xiàn)場(chǎng)景。

RabbitMQ 消息通信中間件整合 Redis 緩存中間件最基礎(chǔ)的實(shí)現(xiàn)場(chǎng)景,其實(shí)核心就是將這兩個(gè)中間件之間的通信進(jìn)行打通, 使位于 RabbitMQ 消息通信中間的消息可以經(jīng)過 Redis 緩存中間件,同時(shí),Redis 緩存中間件中的數(shù)據(jù),也可以根據(jù)實(shí)際情況分發(fā)到 RabbitMQ 消息通信中間件中。

下面讓我們來看一下具體的整合步驟。

像本套課程開篇那樣,我們使用的是基于 Spring Boot Web 框架而搭建的課程項(xiàng)目,并且,是以 Maven 包管理工具來管理項(xiàng)目中各種 jar 包等依賴項(xiàng),所以,要想整合 RabbitMQ 與 Redis ,應(yīng)該首先將這兩個(gè)中間件的 Maven 依賴集成到我們項(xiàng)目中去。

關(guān)于 RabbitMQ 與 Redis 的兩個(gè) Maven 依賴,老師這里直接給出,不需要同學(xué)們?nèi)プ孕胁檎伊恕?/p>

RabbitMQ-Spring 依賴如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
  <groupId>com.rabbitmq</groupId>
  <artifactId>amqp-client</artifactId>
  <version>3.6.5</version>
</dependency>

Redis-Spring 依賴如下:

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在將上述 RabbitMQ 和 Redis 的依賴引入到項(xiàng)目中去之后,我們的項(xiàng)目就具備了 RabbitMQ 和 Redis 的能力,下面我們要做的就是對(duì) RabbitMQ 和 Redis 進(jìn)行相應(yīng)的配置,以滿足我們的項(xiàng)目需求。

這里簡(jiǎn)單來說一下我們都需要配置 RabbitMQ 和 Redis 哪些屬性內(nèi)容。

對(duì)于 RabbitMQ 來說,我們需要在項(xiàng)目中配置 RabbitMQ Server 服務(wù)所在節(jié)點(diǎn)的主機(jī) host 地址,然后配置 RabbitMQ Server 的用戶名和密碼(如果有的話),以及 RabbitMQ Server 服務(wù)所占用的端口號(hào),默認(rèn)為 5672 ,最后,配置 RabbitMQ Server 默認(rèn)使用的交換機(jī)名稱,就可以了。

對(duì)于 Redis 來說,我們同樣地需要配置 Redis Server 服務(wù)所在節(jié)點(diǎn)的主機(jī) host 地址,然后配置訪問 Redis Server 所需要的用戶名和密碼(本教程沒有設(shè)置),接著配置 Redis Server 服務(wù)所占用的端口,默認(rèn)是 6379 ,就可以了。

我們只要在項(xiàng)目中完成了上述所介紹的配置內(nèi)容之后,基本上 RabbitMQ 和 Redis 就可以滿足我們的項(xiàng)目需求了。由于配置文件的介紹不屬于本小節(jié)內(nèi)容范疇,所以 RabbitMQ 和 Redis 的詳細(xì)配置文件本小節(jié)不再進(jìn)行介紹,同學(xué)們可以自行查閱相關(guān)資料獲取。

在將 RabbitMQ 消息通信中間件與 Redis 緩存中間件在項(xiàng)目中配置完成之后,接下來我們就是使用 RabbitMQ 和 Redis 去打造我們的高可用消息隊(duì)列了。

Tips: 請(qǐng)同學(xué)們?cè)谝?RabbitMQ 與 Redis 的 Maven 依賴時(shí)直接復(fù)制上述依賴代碼段,所引入的依賴版本務(wù)必要和老師的保持一致,尤其是 RabbitMQ 的版本。

3.RabbitMQ + Redis 打造高可用消息隊(duì)列概述

其實(shí),RabbitMQ 自身的消息隊(duì)列,已經(jīng)非??煽苛?,可以適應(yīng)很多業(yè)務(wù)場(chǎng)景,除了非常要求性能的高并發(fā)場(chǎng)景之外,一般的高并發(fā)場(chǎng)景,RabbitMQ 自身的消息隊(duì)列完全可以應(yīng)付, 只不過,在一般的高并發(fā)場(chǎng)景中,我們只會(huì)使用 RabbitMQ 消息通信中間件這么一種工具來應(yīng)對(duì)高并發(fā)。

這種場(chǎng)景下,由于我們沒有使用其他的中間件工具,來處理高并發(fā)的請(qǐng)求,而是將所有的高并發(fā)請(qǐng)求都分發(fā)到 RabbitMQ 消息通信中間件上去處理,這就會(huì)直接導(dǎo)致我們的 RabbitMQ Server 服務(wù)的負(fù)載出現(xiàn)激增,或者是 RabbitMQ Server 服務(wù)的負(fù)責(zé)維持在一個(gè)很高的數(shù)值上。

如果 RabbitMQ Server 服務(wù)的高負(fù)載現(xiàn)象所維持的時(shí)間不長,在維持了半分鐘或者是一分鐘之后,RabbitMQ Server 服務(wù)的高負(fù)載已經(jīng)降到了較低數(shù)值,這種現(xiàn)象是正常的,沒有任何問題的。

但是,如果在一般地高并發(fā)環(huán)境中,我們 RabbitMQ Server 服務(wù)的負(fù)載一直維持在了一個(gè)很高的數(shù)值上,那么,這種現(xiàn)象就非常危險(xiǎn)了,因?yàn)?,持續(xù)過高的 RabbitMQ Server 服務(wù)負(fù)載,會(huì)持續(xù)汲取服務(wù)器大部分的資源,如果,此時(shí)服務(wù)器上還有其他項(xiàng)目在運(yùn)行,那很可能導(dǎo)致該項(xiàng)目不能正常運(yùn)行。

最可怕的現(xiàn)象就是,RabbitMQ Server 持續(xù)地汲取服務(wù)器資源,并最終導(dǎo)致我們 RabbitMQ Server 服務(wù)所在節(jié)點(diǎn)的服務(wù)器資源消耗殆盡, 服務(wù)器就會(huì)直接崩潰或者宕機(jī),此時(shí)的 RabbitMQ Server 服務(wù)就不會(huì)返回給我們?nèi)魏雾憫?yīng)了。

這種問題,我們一般稱它為’服務(wù)過載化’現(xiàn)象, 這種現(xiàn)象是我們都不希望發(fā)生的,不管在服務(wù)器上運(yùn)行著哪些服務(wù),服務(wù)器的資源都應(yīng)該被合理地分配,而不是只被一個(gè)服務(wù)所獨(dú)吞。

為了緩解,或者解決上述這種問題,我們引入了 Redis 緩存中間件,我們可以在 RabbitMQ 正式發(fā)送消息之前,使用 Redis 將數(shù)據(jù)進(jìn)行一個(gè)緩存, 并結(jié)合后續(xù)地業(yè)務(wù)邏輯,決定 Redis 中的緩存數(shù)據(jù)是否需要被發(fā)送到 RabbitMQ 消息通信中間件中。

通過對(duì) Redis 的這種配置,我們實(shí)現(xiàn)了數(shù)據(jù)與 RabbitMQ 之間的一種緩沖屏障,當(dāng)再有請(qǐng)求過來時(shí),我們首先訪問的是 Redis 緩沖屏障,然后我們?cè)俑鶕?jù)具體的業(yè)務(wù)邏輯,將 Redis 緩存中的數(shù)據(jù)發(fā)送到 RabbitMQ 中,這樣并不會(huì)將所有的請(qǐng)求都分發(fā)到 RabbitMQ 中了。

這樣一來,我們就緩解了 RabbitMQ Server 服務(wù)的壓力,降低了 RabbitMQ Server 服務(wù)的負(fù)載,優(yōu)化了服務(wù)間的資源占用問題。上述實(shí)現(xiàn)原理如下圖所示:

同學(xué)們可以結(jié)合這個(gè)原理圖去理解上述內(nèi)容。

通過上述打造過程,我們基本上已經(jīng)實(shí)現(xiàn)了一種高可用的消息隊(duì)列,這里的高可用并不是指的是集群間的高可用,而是指的是具體的一種服務(wù)的高可用,即 RabbitMQ 消息隊(duì)列服務(wù)的高可用改造過程,這點(diǎn)同學(xué)們不要搞混淆了。

Tips: 本節(jié)只會(huì)介紹打造高可用消息隊(duì)列的理論思路,并不會(huì)進(jìn)行代碼層面的實(shí)操介紹,為什么要這么做呢?因?yàn)橥瑢W(xué)們只有在將這些理論思路產(chǎn)生一個(gè)自己的理解之后,我們的代碼實(shí)操同學(xué)們才能看的懂,我們會(huì)在下一小節(jié)中進(jìn)行代碼實(shí)操部分的介紹。

4. 小結(jié)

本小節(jié)為同學(xué)們介紹了使用 RabbitMQ 打造扛得住的高并發(fā)環(huán)境的第二部分內(nèi)容,包括 RabbitMQ 如何與 Redis 進(jìn)行整合的詳細(xì)步驟,以及 RabbitMQ 和 Redis 的一些基礎(chǔ)配置內(nèi)容,最后,我們使用 RabbitMQ 與 Redis 將 RabbitMQ 消息隊(duì)列進(jìn)行了改造,介紹了如何使用 Redis 和 RabbitMQ 打造高可用隊(duì)列的理論實(shí)現(xiàn)。

同學(xué)們只有對(duì)本節(jié)內(nèi)容所提及的理論實(shí)現(xiàn)思路有所了解之后,才會(huì)在最后的下一小節(jié)中的代碼實(shí)操部分,理解相應(yīng)地代碼的含義,如果本小節(jié)的理論實(shí)現(xiàn)思路你沒有理解,那還請(qǐng)多學(xué)習(xí)幾遍,否則,在下一小節(jié)中你就會(huì)一臉懵。