最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

全部開發(fā)者教程

RabbitMQ 入門教程

RabbitMQ 簡介
RabbitMQ 簡介

RabbitMQ 中的冪等性介紹

1. 前言

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

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

  • 什么是冪等性;

  • RabbitMQ 中的冪等性概念;

2. 什么是冪等性 ?

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

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

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

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

然而這種現(xiàn)象是不應(yīng)該出現(xiàn)的,如果網(wǎng)購平臺對支付這塊的功能做了冪等性的限制,那么我們在支付完第一筆后,再次進行支付時,網(wǎng)購平臺會提示我們該筆訂單已經(jīng)支付過了,不能重復(fù)支付,而支付成功的提示會在等待一定的時間之后發(fā)給我們,這才是合理的處理結(jié)果。

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

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

3. RabbitMQ 中的冪等性概念

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

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

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

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

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

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

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

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

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

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

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

4. 小結(jié)

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

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