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

全部開發(fā)者教程

RabbitMQ 入門教程

RabbitMQ 簡(jiǎn)介
RabbitMQ 簡(jiǎn)介

RabbitMQ 中的冪等性介紹

1. 前言

Hello,大家好。本小節(jié)為大家介紹冪等性的相關(guān)概念,以及在 RabbitMQ 中,冪等性是如何體現(xiàn)的。對(duì) RabbitMQ 中的冪等性進(jìn)行簡(jiǎn)單了解之后,有利于我們更好地掌握 RabbitMQ 中消息的工作理念和工作思路,話不多說(shuō),讓我們直入正題吧。

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

  • 什么是冪等性;

  • RabbitMQ 中的冪等性概念;

2. 什么是冪等性 ?

冪等性這一名詞,誕生在數(shù)學(xué)領(lǐng)域,其目的就是為了描述一種函數(shù)與數(shù)值變量間的統(tǒng)一對(duì)等關(guān)系。數(shù)學(xué)領(lǐng)域中的冪等性比較抽象,這里就不給各位同學(xué)介紹了,感興趣的同學(xué)可以課下了解一下。隨著時(shí)代的發(fā)展,冪等性這一概念又被應(yīng)用到了諸多除數(shù)學(xué)領(lǐng)域外的領(lǐng)域之中,并且發(fā)揮著重要作用,針對(duì)計(jì)算機(jī)行業(yè)來(lái)說(shuō),冪等性又是如何描述的呢?

冪等性這一概念,關(guān)鍵就在冪等這兩個(gè)字上,即保持一種等價(jià)關(guān)系,在計(jì)算機(jī)中,冪等主要是對(duì)系統(tǒng)做一個(gè)約束,即,對(duì)于同一個(gè)系統(tǒng),在相同條件下,一次對(duì)系統(tǒng)的請(qǐng)求和重復(fù)多次對(duì)系統(tǒng)的請(qǐng)求,對(duì)系統(tǒng)所造成的影響都是一樣的。

我們來(lái)看一下這句話所描述的含義:在同一個(gè)系統(tǒng)中,表示的是我們所開發(fā)的應(yīng)用程序系統(tǒng);在相同條件下,表示的是我們所開發(fā)的應(yīng)用程序都位于同一個(gè)運(yùn)行環(huán)境中;對(duì)系統(tǒng)的請(qǐng)求,表示的是在相同條件下用戶對(duì)我們的應(yīng)用程序所發(fā)起的服務(wù)請(qǐng)求;對(duì)系統(tǒng)所造成的影響都是一樣的,表示的是,無(wú)論是一個(gè)請(qǐng)求還是多個(gè)相同的請(qǐng)求,該請(qǐng)求對(duì)系統(tǒng)所造成的影響都是一樣的。

我們重點(diǎn)需要理解的是,在相同條件下,一個(gè)或者多個(gè)相同的請(qǐng)求,在重復(fù)對(duì)系統(tǒng)進(jìn)行請(qǐng)求之后,對(duì)系統(tǒng)所造成的影響都是一樣的。這里我來(lái)舉個(gè)例子:比如我們?cè)诰W(wǎng)上進(jìn)行購(gòu)物,挑選好要買的商品之后進(jìn)行下單,并進(jìn)行了付款,不巧的是,當(dāng)我們點(diǎn)擊了確認(rèn)支付后,收到了銀行發(fā)來(lái)的扣款短信,但是沒有收到網(wǎng)購(gòu)平臺(tái)支付成功的提示,于是我們又重新對(duì)該訂單進(jìn)行了支付,這最終造成了我們對(duì)于同一個(gè)訂單確支付了兩筆的現(xiàn)象。

然而這種現(xiàn)象是不應(yīng)該出現(xiàn)的,如果網(wǎng)購(gòu)平臺(tái)對(duì)支付這塊的功能做了冪等性的限制,那么我們?cè)谥Ц锻甑谝还P后,再次進(jìn)行支付時(shí),網(wǎng)購(gòu)平臺(tái)會(huì)提示我們?cè)摴P訂單已經(jīng)支付過(guò)了,不能重復(fù)支付,而支付成功的提示會(huì)在等待一定的時(shí)間之后發(fā)給我們,這才是合理的處理結(jié)果。

計(jì)算機(jī)中的冪等性就是專門針對(duì)此種現(xiàn)象而衍變出來(lái)的,類似的場(chǎng)景還有很多,比如我們要對(duì)文章進(jìn)行點(diǎn)贊,我們就會(huì)約束同一用戶同一時(shí)刻只記錄一次點(diǎn)贊結(jié)果等等。我們只需要知道,計(jì)算機(jī)中的冪等性就是為了保證,在相同條件下,同一個(gè)請(qǐng)求的一次或多次請(qǐng)求,對(duì)系統(tǒng)所造成的影響都是一樣的就行了。

計(jì)算機(jī)中冪等性我們知道了,那么在 RabbitMQ 中冪等性又是如何體現(xiàn)的呢,接下來(lái)讓我們一探究竟。

3. RabbitMQ 中的冪等性概念

我們知道,在 RabbitMQ 中,充當(dāng)主角的也就是消息了,而這里所稱的消息指的就是我們應(yīng)用程序中的數(shù)據(jù)。我們還知道,RabbitMQ 實(shí)際就是處理消息的一款中間件,主要處理消息的發(fā)送、消息的接收兩大模塊,消息作為 RabbitMQ 中的主角,想必一定會(huì)對(duì)消息的發(fā)送和接收做綜合方面的處理,即要保障消息準(zhǔn)備被發(fā)送出去,也要保障消息準(zhǔn)確被接收了。

生產(chǎn)端的冪等性體現(xiàn):

在 RabbitMQ 中,保障消息準(zhǔn)確被發(fā)送,以及保障消息準(zhǔn)確被接收的這些保障措施,就用到了計(jì)算機(jī)中的冪等性。

對(duì)于保障消息準(zhǔn)確被發(fā)送而言,我們應(yīng)用程序中的數(shù)據(jù),一旦被發(fā)送到 RabbitMQ Server 中后,無(wú)論 RabbitMQ Server 有沒有接收到這一消息,都會(huì)返回給客戶端一個(gè)接收消息的應(yīng)答,來(lái)告訴客戶端消息在 RabbitMQ Server 中的一個(gè)狀態(tài)。

如果消息沒有被 RabbitMQ Server 接收到,那么客戶端也無(wú)需進(jìn)行消息重復(fù)發(fā)送的操作,RabbitMQ Server 本身會(huì)自動(dòng)將該消息進(jìn)行重復(fù)發(fā)送,直到消息被 RabbitMQ Server 所接收,并返回消息已經(jīng)發(fā)送的確認(rèn)應(yīng)答。

相反,如果消息被 RabbitMQ Server 接收到了,那么客戶端無(wú)須進(jìn)行消息的重復(fù)發(fā)送,如果此時(shí)我們向 RabbitMQ Server 中再次發(fā)送一條同樣的消息,那么 RabbitMQ Server 會(huì)拋出消息已存在異常,這是冪等性的一種體現(xiàn)。

消費(fèi)端的冪等性體現(xiàn):

對(duì)于保障消息準(zhǔn)備被接收而言,存在于 RabbitMQ Server 中的消息,一旦被消費(fèi)者所獲取,那么這個(gè)消費(fèi)者就不能將消息再次發(fā)送出去,同時(shí)該消息只能被當(dāng)前的消費(fèi)者消費(fèi),其他的消費(fèi)者均不能獲取到該消息并消費(fèi)。和消息發(fā)送一樣,無(wú)論消費(fèi)者有沒有將該消息進(jìn)行消費(fèi),都會(huì)給客戶端返回一個(gè)確認(rèn)應(yīng)答。

如果消息沒有被當(dāng)前的消費(fèi)者所消費(fèi),那么 RabbitMQ Server 會(huì)將該消息置于另一個(gè)消息隊(duì)列當(dāng)中,等待此時(shí)刻的所有消息都已經(jīng)被消費(fèi)之后,再回過(guò)頭來(lái)對(duì)該消息進(jìn)行消費(fèi),直到消費(fèi)者正常消費(fèi)掉了該消息。

相反,如果消息被當(dāng)前的消費(fèi)者所消費(fèi),那么,當(dāng)生產(chǎn)者生產(chǎn)出了一個(gè)相同的消息之后,消費(fèi)者也不會(huì)再對(duì)該消息進(jìn)行消費(fèi)了,因?yàn)橥瑯拥南?,消費(fèi)者已經(jīng)進(jìn)行了消費(fèi),并返回了信息消費(fèi)的確認(rèn)性應(yīng)答,這是冪等性的另一種體現(xiàn)。

而無(wú)論是生產(chǎn)端還是消費(fèi)端,RabbitMQ 都將冪等性這一概念應(yīng)用到了實(shí)際的消息處理中,正式由于冪等性的應(yīng)用,RabbitMQ 在消息處理上才會(huì)保證消息可以 100% 的投遞到 Server 端,以及消費(fèi)者可以不重復(fù)的對(duì)消息進(jìn)行正確的消費(fèi),并且都會(huì)返回消息發(fā)送和消費(fèi)的確認(rèn)性應(yīng)答。

4. 小結(jié)

本小節(jié)對(duì)冪等性的概念,以及冪等性如何在 RabbitMQ 中體現(xiàn)的,做了詳細(xì)的闡述。從統(tǒng)一角度上的冪等性概念開始,到計(jì)算機(jī)領(lǐng)域中冪等性概念的規(guī)定,最后到 RabbitMQ 中冪等性的不同種體現(xiàn)結(jié)束,詳細(xì)闡述了冪等的概念,以及 RabbitMQ 對(duì)消息處理進(jìn)行冪等操作的相關(guān)措施,旨在幫助各位同學(xué)可以清楚的理解什么是冪等性、冪等性中的重點(diǎn)是什么,以及 RabbitMQ 是如何應(yīng)用冪等的概念來(lái)處理消息的發(fā)送和消費(fèi)的。

冪等性這一概念貫穿 RabbitMQ 消息處理的始終,所以,了解什么是冪等性,以及冪等性在 RabbitMQ 中的應(yīng)用是理解 RabbitMQ 中處理消息的基礎(chǔ),希望同學(xué)們都可以對(duì)冪等性有自己的見解,這是最重要的。