国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RabbitMQ消息丟失的場景,MQ消息丟失解決方案

這篇具有很好參考價值的文章主要介紹了RabbitMQ消息丟失的場景,MQ消息丟失解決方案。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

第一種(生產(chǎn)者)生產(chǎn)者弄丟了數(shù)據(jù)。生產(chǎn)者將數(shù)據(jù)發(fā)送到 RabbitMQ 的時候,可能數(shù)據(jù)就在半路給搞丟了,因為網(wǎng)絡(luò)問題啥的,都有可能。

第二種(服務(wù)端)RabbitMQ 弄丟了數(shù)據(jù)。MQ還沒有持久化自己掛了

第三種(消費者)消費端弄丟了數(shù)據(jù)。剛消費到,還沒處理,結(jié)果進程掛了,比如重啟了。

?

1.針對生產(chǎn)者

方案1 :開啟RabbitMQ事務(wù)
可以選擇用 RabbitMQ 提供的事務(wù)功能,就是生產(chǎn)者發(fā)送數(shù)據(jù)之前開啟 RabbitMQ 事務(wù)channel.txSelect,然后發(fā)送消息,如果消息沒有成功被 RabbitMQ 接收到,那么生產(chǎn)者會收到異常報錯,此時就可以回滾事務(wù)channel.txRollback,然后重試發(fā)送消息;如果收到了消息,那么可以提交事務(wù)channel.txCommit。
? ? ? ? ? ? ?缺點:?RabbitMQ 事務(wù)機制是同步的,你提交一個事務(wù)之后會阻塞在那兒,采用這種方式基本上吞吐量會下來,因為太耗性能。

方案2: 使用confirm機制

事務(wù)機制和 confirm 機制最大的不同在于,事務(wù)機制是同步的,你提交一個事務(wù)之后會阻塞在那兒,但是 confirm 機制是異步的

在生產(chǎn)者開啟了confirm模式之后,每次寫的消息都會分配一個唯一的id,然后如果寫入了rabbitmq之中,rabbitmq會給你回傳一個ack消息,告訴你這個消息發(fā)送OK了;如果rabbitmq沒能處理這個消息,會回調(diào)你一個nack接口,告訴你這個消息失敗了,你可以進行重試。而且你可以結(jié)合這個機制知道自己在內(nèi)存里維護每個消息的id,如果超過一定時間還沒接收到這個消息的回調(diào),那么你可以進行重發(fā)

?

2.針對RabbitMQ

有三點需要注意:

(1)要保證rabbitMQ不丟失消息,那么就需要開啟rabbitMQ的持久化機制,即把消息持久化到硬盤上,這樣即使rabbitMQ掛掉在重啟后仍然可以從硬盤讀取消息;

(2)如果rabbitMQ單點故障怎么辦,這種情況倒不會造成消息丟失,這里就要提到rabbitMQ的3種安裝模式,單機模式、普通集群模式、鏡像集群模式,這里要保證rabbitMQ的高可用就要配合HAPROXY做鏡像集群模式

(3)如果硬盤壞掉怎么保證消息不丟失

(1)消息持久化

RabbitMQ 的消息默認(rèn)存放在內(nèi)存上面,如果不特別聲明設(shè)置,消息不會持久化保存到硬盤上面的,如果節(jié)點重啟或者意外crash掉,消息就會丟失。所以就要對消息進行持久化處理。如何持久化,下面具體說明下:

? ? 要想做到消息持久化,必須滿足以下三個條件,缺一不可。

  1) Exchange 設(shè)置持久化

  2)Queue 設(shè)置持久化

  3)Message持久化發(fā)送:發(fā)送消息設(shè)置發(fā)送模式deliveryMode=2,代表持久化消息

?

(2)設(shè)置集群鏡像模式

我們先來介紹下RabbitMQ三種部署模式:

1)單節(jié)點模式:最簡單的情況,非集群模式,節(jié)點掛了,消息就不能用了。業(yè)務(wù)可能癱瘓,只能等待。

2)普通模式:消息只會存在與當(dāng)前節(jié)點中,并不會同步到其他節(jié)點,當(dāng)前節(jié)點宕機,有影響的業(yè)務(wù)會癱瘓,只能等待節(jié)點恢復(fù)重啟可用(必須持久化消息情況下)。

3)鏡像模式:消息會同步到其他節(jié)點上,可以設(shè)置同步的節(jié)點個數(shù),但吞吐量會下降。屬于RabbitMQ的HA方案

?

(3)消息補償機制

為什么還要消息補償機制呢?難道消息還會丟失,沒錯,系統(tǒng)是在一個復(fù)雜的環(huán)境,不要想的太簡單了,雖然以上的三種方案,基本可以保證消息的高可用不丟失的問題,

比如:持久化的消息,保存到硬盤過程中,當(dāng)前隊列節(jié)點掛了,存儲節(jié)點硬盤又壞了,消息丟了,怎么辦?

1)生產(chǎn)端首先將業(yè)務(wù)數(shù)據(jù)以及消息數(shù)據(jù)入庫,需要在同一個事務(wù)中,消息數(shù)據(jù)入庫失敗,則整體回滾

2)根據(jù)消息表中消息狀態(tài),失敗則進行消息補償措施,重新發(fā)送消息處理。

?

3.針對消費者

?

方案一:ACK確認(rèn)機制

多個消費者同時收取消息,比如消息接收到一半的時候,一個消費者死掉了(邏輯復(fù)雜時間太長,超時了或者消費被停機或者網(wǎng)絡(luò)斷開鏈接),如何保證消息不丟?

使用rabbitmq提供的ack機制,服務(wù)端首先關(guān)閉rabbitmq的自動ack,然后每次在確保處理完這個消息之后,在代碼里手動調(diào)用ack。這樣就可以避免消息還沒有處理完就ack。才把消息從內(nèi)存刪除。

這樣就解決了,即使一個消費者出了問題,但不會同步消息給服務(wù)端,會有其他的消費端去消費,保證了消息不丟的case。

??

四、總結(jié)

?

RabbitMQ消息丟失的場景,MQ消息丟失解決方案

?

如果需要保證消息在整條鏈路中不丟失,那就需要生產(chǎn)端、mq自身與消費端共同去保障。

生產(chǎn)端:對生產(chǎn)的消息進行狀態(tài)標(biāo)記,開啟confirm機制,依據(jù)mq的響應(yīng)來更新消息狀態(tài),使用定時任務(wù)重新投遞超時的消息,多次投遞失敗進行報警。

mq自身:開啟持久化,并在落盤后再進行ack。如果是鏡像部署模式,需要在同步到多個副本之后再進行ack。

消費端:開啟手動ack模式,在業(yè)務(wù)處理完成后再進行ack,并且需要保證冪等。

通過以上的處理,理論上不存在消息丟失的情況,但是系統(tǒng)的吞吐量以及性能有所下降。

在實際開發(fā)中,需要考慮消息丟失的影響程度,來做出對可靠性以及性能之間的權(quán)衡。

?



文章來源地址http://www.zghlxwxcb.cn/news/detail-711713.html

?
?

到了這里,關(guān)于RabbitMQ消息丟失的場景,MQ消息丟失解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 消息中間件之八股面試回答篇:一、問題概覽+MQ的應(yīng)用場景+RabbitMQ如何保證消息不丟失(生產(chǎn)者確認(rèn)機制、持久化、消費者確認(rèn)機制)+回答模板

    消息中間件之八股面試回答篇:一、問題概覽+MQ的應(yīng)用場景+RabbitMQ如何保證消息不丟失(生產(chǎn)者確認(rèn)機制、持久化、消費者確認(rèn)機制)+回答模板

    目前主流的消息隊列技術(shù)(MQ技術(shù))分為RabbitMQ和Kafka,其中深藍(lán)色為只要是MQ,一般都會問到的問題。淺藍(lán)色是針對RabbitMQ的特性的問題。藍(lán)紫色為針對Kafka的特性的問題。 MQ主要提供的功能為:異步 解耦 削峰 。 展開來講就是 異步發(fā)送(驗證碼、短信、郵件…) MYSQL和Redi

    2024年01月24日
    瀏覽(55)
  • kafka消息丟失解決方案

    kafka消息丟失解決方案

    目錄 一、生產(chǎn)端數(shù)據(jù)丟失 二、存儲端消息丟失 三、消費端數(shù)據(jù)丟失 四、小結(jié) 一條消息從生產(chǎn)到消費完成這個過程,可以劃分三個階段,為了方便描述,我給每個階段分別起了個名字。 生產(chǎn)階段: 在這個階段,從消息在 Producer 創(chuàng)建出來,經(jīng)過網(wǎng)絡(luò)傳輸發(fā)送到 Broker 端。 存儲

    2023年04月26日
    瀏覽(29)
  • Kafka消息丟失:原因、解決方案和零丟失的配置

    在使用Apache Kafka作為分布式消息系統(tǒng)時,消息丟失是一種常見的問題。消息丟失可能會導(dǎo)致數(shù)據(jù)不一致或功能故障,因此對于許多應(yīng)用程序來說是不可接受的。本文將介紹Kafka消息丟失的原因、解決方案以及如何配置Kafka以實現(xiàn)零丟失。 Kafka消息丟失可能由多種原因引起。下面

    2024年02月13日
    瀏覽(18)
  • 一文讀懂kafka消息丟失問題和解決方案

    一文讀懂kafka消息丟失問題和解決方案

    今天分享一下kafka的消息丟失問題,kafka的消息丟失是一個很值得關(guān)注的問題,根據(jù)消息的重要性,消息丟失的嚴(yán)重性也會進行放大,如何從最大程度上保證消息不丟失,要從生產(chǎn)者,消費者,broker幾個端來說。 kafka生產(chǎn)者生產(chǎn)好消息后,會將消息發(fā)送到broker節(jié)點,broker對數(shù)據(jù)

    2024年02月08日
    瀏覽(16)
  • RabbitMq 的消息可靠性問題(二)---MQ的消息丟失和consumer消費問題

    RabbitMq 的消息可靠性問題(二)---MQ的消息丟失和consumer消費問題

    RabbitMq 消息可靠性問題(一) — publisher發(fā)送時丟失 前面我們從publisher的方向出發(fā)解決了發(fā)送時丟失的問題,那么我們在發(fā)送消息到exchange, 再由exchange轉(zhuǎn)存到queue的過程中。如果MQ宕機了,那么我們的消息是如何確??煽啃缘哪??當(dāng)消息由隊列發(fā)到對應(yīng)的消費者處理時,consumer 接

    2024年02月11日
    瀏覽(20)
  • RabbitMQ--消息堆積--解決方案

    原文網(wǎng)址:RabbitMQ--消息堆積--解決方案_IT利刃出鞘的博客-CSDN博客 本文介紹如何處理RabbitMQ消息堆積(積壓)。 對于消息隊列(MQ)來說,消息丟失/消息重復(fù)/消費順序/消息堆積(積壓)是比較常見的問題,都屬于消息異常,這幾個問題比較重要,面試中也會經(jīng)常問到。 消息堆積即

    2023年04月08日
    瀏覽(20)
  • RabbitMQ 消息丟失的場景,如何保證消息不丟失?

    RabbitMQ 消息丟失的場景,如何保證消息不丟失?

    第一種:生產(chǎn)者弄丟了數(shù)據(jù)。生產(chǎn)者將數(shù)據(jù)發(fā)送到 RabbitMQ 的時候,可能數(shù)據(jù)就在半路給搞丟了,因為網(wǎng)絡(luò)問題啥的,都有可能。 第二種:RabbitMQ 弄丟了數(shù)據(jù)。MQ還沒有持久化自己掛了 第三種:消費端弄丟了數(shù)據(jù)。剛消費到,還沒處理,結(jié)果進程掛了,比如重啟了。 1.針對生

    2024年02月11日
    瀏覽(29)
  • Unity切換場景保存上一個場景的數(shù)據(jù),Unity切換場景的案例,Unity切換場景再返回數(shù)據(jù)丟失的解決方案

    Unity在切換場景之后在再次返回上不會保存上一個場景的數(shù)據(jù)的。 但是大多數(shù)時候我們是需要這些數(shù)據(jù)的,這應(yīng)該如何解決呢? 文件鏈接:我將解決方案打包了,點我下載,免費,或者私信我發(fā)你 首先將需要存儲到一個class中,這里以學(xué)生為例子 然后我們再創(chuàng)建一個腳本,

    2024年02月02日
    瀏覽(20)
  • 【RabbitMQ | 第六篇】消息重復(fù)消費問題及解決方案

    【RabbitMQ | 第六篇】消息重復(fù)消費問題及解決方案

    什么是 消息重復(fù)消費 ?首先我們來看一下消息的傳輸流程。消息生產(chǎn)者–MQ–消息消費者;消息生產(chǎn)者發(fā)送消息到MQ服務(wù)器,MQ服務(wù)器存儲消息,消息消費者監(jiān)聽MQ的消息,發(fā)現(xiàn)有消息就消費消息。 所以消息重復(fù)也就出現(xiàn)在 兩個階段 1 :生產(chǎn)者多發(fā)送了消息給MQ; 2 :MQ的一條

    2024年04月26日
    瀏覽(25)
  • RabbitMQ - 消息堆積問題的最佳解決方案?惰性隊列

    RabbitMQ - 消息堆積問題的最佳解決方案?惰性隊列

    目錄 一、惰性隊列 1.1、消息堆積問題 1.2、消息堆積問題的解決方法 從消費者的角度: 從隊列的角度: 1.3、引入惰性隊列 1.3.1、什么是惰性隊列 1.3.2、惰性隊列的使用 1.3.3、效果演示 當(dāng)生產(chǎn)者發(fā)送消息的速度超過了消費者處理消息的速度,就會導(dǎo)致隊列中的消息堆積,直到

    2024年02月05日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包