成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

RabbitMQ面試要點(diǎn)有哪些

這篇文章主要為大家展示了“RabbitMQ面試要點(diǎn)有哪些”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“RabbitMQ面試要點(diǎn)有哪些”這篇文章吧。

在湯旺等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),營(yíng)銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,湯旺網(wǎng)站建設(shè)費(fèi)用合理。

1. 如何確保消息正確地發(fā)送至RabbitMQ?

RabbitMQ使用發(fā)送方確認(rèn)模式,確保消息正確地發(fā)送到RabbitMQ。

發(fā)送方確認(rèn)模式:將信道設(shè)置成confirm模式(發(fā)送方確認(rèn)模式),則所有在信道上發(fā)布的消息都會(huì)被指派一個(gè)唯一的ID。一旦消息被投遞到目的隊(duì)列后,或者消息被寫入磁盤后(可持久化的消息),信道會(huì)發(fā)送一個(gè)確認(rèn)給生產(chǎn)者(包含消息唯一ID)。如果RabbitMQ發(fā)生內(nèi)部錯(cuò)誤從而導(dǎo)致消息丟失,會(huì)發(fā)送一條nack(not acknowledged,未確認(rèn))消息。

發(fā)送方確認(rèn)模式是異步的,生產(chǎn)者應(yīng)用程序在等待確認(rèn)的同時(shí),可以繼續(xù)發(fā)送消息。當(dāng)確認(rèn)消息到達(dá)生產(chǎn)者應(yīng)用程序,生產(chǎn)者應(yīng)用程序的回調(diào)方法就會(huì)被觸發(fā)來處理確認(rèn)消息。

 

2. 如何確保消息接收方消費(fèi)了消息?

接收方消息確認(rèn)機(jī)制:消費(fèi)者接收每一條消息后都必須進(jìn)行確認(rèn)(消息接收和消息確認(rèn)是兩個(gè)不同操作)。只有消費(fèi)者確認(rèn)了消息,RabbitMQ才能安全地把消息從隊(duì)列中刪除。

這里并沒有用到超時(shí)機(jī)制,RabbitMQ僅通過Consumer的連接中斷來確認(rèn)是否需要重新發(fā)送消息。也就是說,只要連接不中斷,RabbitMQ給了Consumer足夠長(zhǎng)的時(shí)間來處理消息。

下面羅列幾種特殊情況:

  • 如果消費(fèi)者接收到消息,在確認(rèn)之前斷開了連接或取消訂閱,RabbitMQ會(huì)認(rèn)為消息沒有被分發(fā),然后重新分發(fā)給下一個(gè)訂閱的消費(fèi)者。

    (可能存在消息重復(fù)消費(fèi)的隱患,需要根據(jù)bizId去重)

  • 如果消費(fèi)者接收到消息卻沒有確認(rèn)消息,連接也未斷開,則RabbitMQ認(rèn)為該消費(fèi)者繁忙,將不會(huì)給該消費(fèi)者分發(fā)更多的消息。

 

3. 如何避免消息重復(fù)投遞或重復(fù)消費(fèi)?

在消息生產(chǎn)時(shí),MQ內(nèi)部針對(duì)每條生產(chǎn)者發(fā)送的消息生成一個(gè)inner-msg-id,作為去重和冪等的依據(jù)(消息投遞失敗并重傳),避免重復(fù)的消息進(jìn)入隊(duì)列;在消息消費(fèi)時(shí),要求消息體中必須要有一個(gè)bizId(對(duì)于同一業(yè)務(wù)全局唯一,如支付ID、訂單ID、帖子ID等)作為去重和冪等的依據(jù),避免同一條消息被重復(fù)消費(fèi)。

 

4. 消息基于什么傳輸?

由于TCP連接的創(chuàng)建和銷毀開銷較大,且并發(fā)數(shù)受系統(tǒng)資源限制,會(huì)造成性能瓶頸。RabbitMQ使用信道的方式來傳輸數(shù)據(jù)。信道是建立在真實(shí)的TCP連接內(nèi)的虛擬連接,且每條TCP連接上的信道數(shù)量沒有限制。

 

5. 消息如何分發(fā)?

若該隊(duì)列至少有一個(gè)消費(fèi)者訂閱,消息將以循環(huán)(round-robin)的方式發(fā)送給消費(fèi)者。每條消息只會(huì)分發(fā)給一個(gè)訂閱的消費(fèi)者(前提是消費(fèi)者能夠正常處理消息并進(jìn)行確認(rèn))。

 

6. 消息怎么路由?

從概念上來說,消息路由必須有三部分:交換器、路由、綁定。生產(chǎn)者把消息發(fā)布到交換器上;綁定決定了消息如何從路由器路由到特定的隊(duì)列;消息最終到達(dá)隊(duì)列,并被消費(fèi)者接收。

  1. 消息發(fā)布到交換器時(shí),消息將擁有一個(gè)路由鍵(routing key),在消息創(chuàng)建時(shí)設(shè)定。

  2. 通過隊(duì)列路由鍵,可以把隊(duì)列綁定到交換器上。

  3. 消息到達(dá)交換器后,RabbitMQ會(huì)將消息的路由鍵與隊(duì)列的路由鍵進(jìn)行匹配(針對(duì)不同的交換器有不同的路由規(guī)則)。

    如果能夠匹配到隊(duì)列,則消息會(huì)投遞到相應(yīng)隊(duì)列中;

    如果不能匹配到任何隊(duì)列,消息將進(jìn)入 “黑洞”。

常用的交換器主要分為一下三種:

  • direct:

    如果路由鍵完全匹配,消息就被投遞到相應(yīng)的隊(duì)列

  • fanout:

    如果交換器收到消息,將會(huì)廣播到所有綁定的隊(duì)列上

  • topic:

    可以使來自不同源頭的消息能夠到達(dá)同一個(gè)隊(duì)列。

    使用topic交換器時(shí),可以使用通配符,比如:

    “*” 匹配特定位置的任意文本, “.” 把路由鍵分為了幾部分,“#” 匹配所有規(guī)則等。

    特別注意:

    發(fā)往topic交換器的消息不能隨意的設(shè)置選擇鍵(routing_key),必須是由"."隔開的一系列的標(biāo)識(shí)符組成。

 

7. 如何確保消息不丟失?

消息持久化的前提是:將交換器/隊(duì)列的durable屬性設(shè)置為true,表示交換器/隊(duì)列是持久交換器/隊(duì)列,在服務(wù)器崩潰或重啟之后不需要重新創(chuàng)建交換器/隊(duì)列(交換器/隊(duì)列會(huì)自動(dòng)創(chuàng)建)。

如果消息想要從Rabbit崩潰中恢復(fù),那么消息必須:

  • 在消息發(fā)布前,通過把它的 “投遞模式” 選項(xiàng)設(shè)置為2(持久)來把消息標(biāo)記成持久化

  • 將消息發(fā)送到持久交換器

  • 消息到達(dá)持久隊(duì)列

RabbitMQ確保持久性消息能從服務(wù)器重啟中恢復(fù)的方式是,將它們寫入磁盤上的一個(gè)持久化日志文件,當(dāng)發(fā)布一條持久性消息到持久交換器上時(shí),Rabbit會(huì)在消息提交到日志文件后才發(fā)送響應(yīng)(如果消息路由到了非持久隊(duì)列,它會(huì)自動(dòng)從持久化日志中移除)。一旦消費(fèi)者從持久隊(duì)列中消費(fèi)了一條持久化消息,RabbitMQ會(huì)在持久化日志中把這條消息標(biāo)記為等待垃圾收集。如果持久化消息在被消費(fèi)之前RabbitMQ重啟,那么Rabbit會(huì)自動(dòng)重建交換器和隊(duì)列(以及綁定),并重播持久化日志文件中的消息到合適的隊(duì)列或者交換器上。

 

8. 使用RabbitMQ有什么好處?

  • 應(yīng)用解耦(系統(tǒng)拆分)

  • 異步處理(預(yù)約掛號(hào)業(yè)務(wù)處理成功后,異步發(fā)送短信、推送消息、日志記錄等)

  • 消息分發(fā)

  • 流量削峰

  • 消息緩沖

  • ......

 

 9. 其他

RabbitMQ是 消息投遞服務(wù),在應(yīng)用程序和服務(wù)器之間扮演路由器的角色,而應(yīng)用程序或服務(wù)器可以發(fā)送和接收包裹。其通信方式是一種 “發(fā)后即忘(fire-and-forget)” 的單向方式。

其中消息包含兩部分內(nèi)容:有效載荷(payload)和標(biāo)簽(label)

有效載荷是需要傳輸?shù)臄?shù)據(jù),可以是任意內(nèi)容。

標(biāo)簽描述了有效載荷,RabbitMQ會(huì)根據(jù)標(biāo)簽的描述,把消息發(fā)送給感興趣的接收方。

以上是“RabbitMQ面試要點(diǎn)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

新聞標(biāo)題:RabbitMQ面試要點(diǎn)有哪些
URL標(biāo)題:http://jinyejixie.com/article16/poeogg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、全網(wǎng)營(yíng)銷推廣、微信公眾號(hào)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
平和县| 花莲市| 竹北市| 定襄县| 昌黎县| 徐闻县| 刚察县| 巨野县| 织金县| 灌南县| 淳安县| 梁山县| 浦县| 攀枝花市| 安化县| 新安县| 垫江县| 惠东县| 惠东县| 临邑县| 舞阳县| 峡江县| 阜宁县| 合水县| 津市市| 清水河县| 瓦房店市| 乌鲁木齐县| 镇赉县| 麦盖提县| 怀集县| 柯坪县| 邓州市| 普格县| 成安县| 溆浦县| 西畴县| 玉龙| 芮城县| 界首市| 公主岭市|