内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

RabbitMQ面試篇-創(chuàng)新互聯(lián)

文章目錄
  • 1 你們?yōu)槭裁催x擇了RabbitMQ而不是其它的MQ?
  • 2 RabbitMQ如何確保消息的不丟失?
  • 3 RabbitMQ如何避免消息堆積?
  • 4 RabbitMQ如何保證消息的有序性?
  • 5 如何防止MQ消息被重復(fù)消費(fèi)?
  • 6 如何保證RabbitMQ的高可用?
  • 7 使用MQ可以解決那些問題?

目前累計(jì)服務(wù)客戶成百上千,積累了豐富的產(chǎn)品開發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹立企業(yè)形象,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實(shí)、誠信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過對領(lǐng)先技術(shù)的掌握、對創(chuàng)意設(shè)計(jì)的研究、對客戶形象的視覺傳遞、對應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。1 你們?yōu)槭裁催x擇了RabbitMQ而不是其它的MQ?

如圖:
在這里插入圖片描述
話術(shù):

kafka是以吞吐量高而聞名,不過其數(shù)據(jù)穩(wěn)定性一般,而且無法保證消息有序性。我們公司的日志收集也有使用,業(yè)務(wù)模塊中則使用的RabbitMQ。

阿里巴巴的RocketMQ基于Kafka的原理,彌補(bǔ)了Kafka的缺點(diǎn),繼承了其高吞吐的優(yōu)勢,其客戶端目前以Java為主。但是我們擔(dān)心阿里巴巴開源產(chǎn)品的穩(wěn)定性,所以就沒有使用。

RabbitMQ基于面向并發(fā)的語言Erlang開發(fā),吞吐量不如Kafka,但是對我們公司來講夠用了。而且消息可靠性較好,并且消息延遲極低,集群搭建比較方便。支持多種協(xié)議,并且有各種語言的客戶端,比較靈活。Spring對RabbitMQ的支持也比較好,使用起來比較方便,比較符合我們公司的需求。

綜合考慮我們公司的并發(fā)需求以及穩(wěn)定性需求,我們選擇了RabbitMQ。

2 RabbitMQ如何確保消息的不丟失?

話術(shù):

RabbitMQ針對消息傳遞過程中可能發(fā)生問題的各個(gè)地方,給出了針對性的解決方案:

  • 生產(chǎn)者發(fā)送消息時(shí)可能因?yàn)榫W(wǎng)絡(luò)問題導(dǎo)致消息沒有到達(dá)交換機(jī):
    • RabbitMQ提供了publisher confirm機(jī)制
      • 生產(chǎn)者發(fā)送消息后,可以編寫ConfirmCallback函數(shù)
      • 消息成功到達(dá)交換機(jī)后,RabbitMQ會調(diào)用ConfirmCallback通知消息的發(fā)送者,返回ACK
      • 消息如果未到達(dá)交換機(jī),RabbitMQ也會調(diào)用ConfirmCallback通知消息的發(fā)送者,返回NACK
      • 消息超時(shí)未發(fā)送成功也會拋出異常
  • 消息到達(dá)交換機(jī)后,如果未能到達(dá)隊(duì)列,也會導(dǎo)致消息丟失:
    • RabbitMQ提供了publisher return機(jī)制
      • 生產(chǎn)者可以定義ReturnCallback函數(shù)
      • 消息到達(dá)交換機(jī),未到達(dá)隊(duì)列,RabbitMQ會調(diào)用ReturnCallback通知發(fā)送者,告知失敗原因
  • 消息到達(dá)隊(duì)列后,MQ宕機(jī)也可能導(dǎo)致丟失消息:
    • RabbitMQ提供了持久化功能,集群的主從備份功能
      • 消息持久化,RabbitMQ會將交換機(jī)、隊(duì)列、消息持久化到磁盤,宕機(jī)重啟可以恢復(fù)消息
      • 鏡像集群,仲裁隊(duì)列,都可以提供主從備份功能,主節(jié)點(diǎn)宕機(jī),從節(jié)點(diǎn)會自動切換為主,數(shù)據(jù)依然在
  • 消息投遞給消費(fèi)者后,如果消費(fèi)者處理不當(dāng),也可能導(dǎo)致消息丟失
    • SpringAMQP基于RabbitMQ提供了消費(fèi)者確認(rèn)機(jī)制、消費(fèi)者重試機(jī)制,消費(fèi)者失敗處理策略:
      • 消費(fèi)者的確認(rèn)機(jī)制:
        • 消費(fèi)者處理消息成功,未出現(xiàn)異常時(shí),Spring返回ACK給RabbitMQ,消息才被移除
        • 消費(fèi)者處理消息失敗,拋出異常,宕機(jī),Spring返回NACK或者不返回結(jié)果,消息不被異常
      • 消費(fèi)者重試機(jī)制:
        • 默認(rèn)情況下,消費(fèi)者處理失敗時(shí),消息會再次回到MQ隊(duì)列,然后投遞給其它消費(fèi)者。Spring提供的消費(fèi)者重試機(jī)制,則是在處理失敗后不返回NACK,而是直接在消費(fèi)者本地重試。多次重試都失敗后,則按照消費(fèi)者失敗處理策略來處理消息。避免了消息頻繁入隊(duì)帶來的額外壓力。
      • 消費(fèi)者失敗策略:
        • 當(dāng)消費(fèi)者多次本地重試失敗時(shí),消息默認(rèn)會丟棄。
        • Spring提供了Republish策略,在多次重試都失敗,耗盡重試次數(shù)后,將消息重新投遞給指定的異常交換機(jī),并且會攜帶上異常棧信息,幫助定位問題。
3 RabbitMQ如何避免消息堆積?

話術(shù):

消息堆積問題產(chǎn)生的原因往往是因?yàn)橄l(fā)送的速度超過了消費(fèi)者消息處理的速度。因此解決方案無外乎以下三點(diǎn):

  • 提高消費(fèi)者處理速度
  • 增加更多消費(fèi)者
  • 增加隊(duì)列消息存儲上限

1)提高消費(fèi)者處理速度

消費(fèi)者處理速度是由業(yè)務(wù)代碼決定的,所以我們能做的事情包括:

  • 盡可能優(yōu)化業(yè)務(wù)代碼,提高業(yè)務(wù)性能
  • 接收到消息后,開啟線程池,并發(fā)處理多個(gè)消息

優(yōu)點(diǎn):成本低,改改代碼即可

缺點(diǎn):開啟線程池會帶來額外的性能開銷,對于高頻、低時(shí)延的任務(wù)不合適。推薦任務(wù)執(zhí)行周期較長的業(yè)務(wù)。

2)增加更多消費(fèi)者

一個(gè)隊(duì)列綁定多個(gè)消費(fèi)者,共同爭搶任務(wù),自然可以提供消息處理的速度。

優(yōu)點(diǎn):能用錢解決的問題都不是問題。實(shí)現(xiàn)簡單粗暴

缺點(diǎn):問題是沒有錢。成本太高

3)增加隊(duì)列消息存儲上限

在RabbitMQ的1.8版本后,加入了新的隊(duì)列模式:Lazy Queue

這種隊(duì)列不會將消息保存在內(nèi)存中,而是在收到消息后直接寫入磁盤中,理論上沒有存儲上限??梢越鉀Q消息堆積問題。

優(yōu)點(diǎn):磁盤存儲更安全;存儲無上限;避免內(nèi)存存儲帶來的Page Out問題,性能更穩(wěn)定;

缺點(diǎn):磁盤存儲受到IO性能的限制,消息時(shí)效性不如內(nèi)存模式,但影響不大。

4 RabbitMQ如何保證消息的有序性?

話術(shù):

其實(shí)RabbitMQ是隊(duì)列存儲,天然具備先進(jìn)先出的特點(diǎn),只要消息的發(fā)送是有序的,那么理論上接收也是有序的。不過當(dāng)一個(gè)隊(duì)列綁定了多個(gè)消費(fèi)者時(shí),可能出現(xiàn)消息輪詢投遞給消費(fèi)者的情況,而消費(fèi)者的處理順序就無法保證了。

因此,要保證消息的有序性,需要做的下面幾點(diǎn):

  • 保證消息發(fā)送的有序性
  • 保證一組有序的消息都發(fā)送到同一個(gè)隊(duì)列
  • 保證一個(gè)隊(duì)列只包含一個(gè)消費(fèi)者
5 如何防止MQ消息被重復(fù)消費(fèi)?

話術(shù):

消息重復(fù)消費(fèi)的原因多種多樣,不可避免。所以只能從消費(fèi)者端入手,只要能保證消息處理的冪等性就可以確保消息不被重復(fù)消費(fèi)。

而冪等性的保證又有很多方案:

  • 給每一條消息都添加一個(gè)唯一id,在本地記錄消息表及消息狀態(tài),處理消息時(shí)基于數(shù)據(jù)庫表的id唯一性做判斷
  • 同樣是記錄消息表,利用消息狀態(tài)字段實(shí)現(xiàn)基于樂觀鎖的判斷,保證冪等
  • 基于業(yè)務(wù)本身的冪等性。比如根據(jù)id的刪除、查詢業(yè)務(wù)天生冪等;新增、修改等業(yè)務(wù)可以考慮基于數(shù)據(jù)庫id唯一性、或者樂觀鎖機(jī)制確保冪等。本質(zhì)與消息表方案類似。
6 如何保證RabbitMQ的高可用?

話術(shù):

要實(shí)現(xiàn)RabbitMQ的高可用無外乎下面兩點(diǎn):

  • 做好交換機(jī)、隊(duì)列、消息的持久化
  • 搭建RabbitMQ的鏡像集群,做好主從備份。當(dāng)然也可以使用仲裁隊(duì)列代替鏡像集群。
7 使用MQ可以解決那些問題?

話術(shù):

RabbitMQ能解決的問題很多,例如:

  • 解耦合:將幾個(gè)業(yè)務(wù)關(guān)聯(lián)的微服務(wù)調(diào)用修改為基于MQ的異步通知,可以解除微服務(wù)之間的業(yè)務(wù)耦合。同時(shí)還提高了業(yè)務(wù)性能。
  • 流量削峰:將突發(fā)的業(yè)務(wù)請求放入MQ中,作為緩沖區(qū)。后端的業(yè)務(wù)根據(jù)自己的處理能力從MQ中獲取消息,逐個(gè)處理任務(wù)。流量曲線變的平滑很多
  • 延遲隊(duì)列:基于RabbitMQ的死信隊(duì)列或者DelayExchange插件,可以實(shí)現(xiàn)消息發(fā)送后,延遲接收的效果。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱:RabbitMQ面試篇-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://m.rwnh.cn/article38/iiepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈App設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、域名注冊、網(wǎng)站設(shè)計(jì)標(biāo)簽優(yōu)化

廣告

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

外貿(mào)網(wǎng)站建設(shè)
大余县| 会昌县| 盐源县| 共和县| 南汇区| 巴塘县| 沂源县| 静宁县| 巴林左旗| 内丘县| 青阳县| 家居| 精河县| 武义县| 阿合奇县| 莎车县| 隆回县| 义乌市| 星子县| 洛阳市| 桂平市| 泾源县| 高清| 达州市| 电白县| 和顺县| 锦州市| 三明市| 历史| 青冈县| 获嘉县| 海口市| 彩票| 泰和县| 高雄市| 海晏县| 武宁县| 夏河县| 阿拉尔市| 泾川县| 绩溪县|