国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

RocketMQ解決消息重復(fù)啟動(dòng) 實(shí)用docker容器推薦?

實(shí)用docker容器推薦?推薦MySQL Redis MongoDB等存儲(chǔ)容器,非常方便本地開發(fā)和學(xué)習(xí)。此外,還有一系列類似于nacos gitlab rockRocketMQ是如何應(yīng)對(duì)每天1500億

實(shí)用docker容器推薦?

推薦MySQL Redis MongoDB等存儲(chǔ)容器,非常方便本地開發(fā)和學(xué)習(xí)。此外,還有一系列類似于nacos gitlab rock

RocketMQ是如何應(yīng)對(duì)每天1500億條的數(shù)據(jù)處理的?

這個(gè)問題太大了。簡(jiǎn)單來說,發(fā)布者發(fā)出消息后,消息數(shù)據(jù)已經(jīng)以文件的形式相對(duì)有序地存儲(chǔ)在各個(gè)服務(wù)器中,消費(fèi)者也相對(duì)有序地消費(fèi)了消息數(shù)據(jù)。關(guān)鍵點(diǎn)是消息的分布式存儲(chǔ)、異步傳輸和內(nèi)存的零拷貝。

rabbitmq和rocketmq區(qū)別?

RabbitMQ基于具有跨語言特性的AMQP協(xié)議,支持多種開發(fā)語言,用erlang語言編寫,天生具有高并發(fā)性。

Rock

JAVA面試如何保證消息不被重復(fù)消費(fèi)?如何保證消息消費(fèi)的冪等性?

今天,讓我們 讓我們看一些方案來確保MQ的冪等性。

01.冪等的概念

我先說說什么是冪等。

當(dāng)用戶一次或多次請(qǐng)求同一個(gè)操作時(shí)(多次發(fā)送或接收消息),最終結(jié)果是一致的,不會(huì)因?yàn)槎啻握?qǐng)求而產(chǎn)生副作用;比如同一個(gè)訂單付款兩次,客戶最后應(yīng)該只扣一次。

查詢和刪除:查詢自然是冪等的。在數(shù)據(jù)不變的前提下,相同查詢條件下一次查詢和多次查詢的結(jié)果相同;刪除也是如此。如果同一個(gè)條件刪除一次,刪除多次,可能刪除的數(shù)據(jù)量是不一樣的,但是數(shù)據(jù)庫里的數(shù)據(jù)不會(huì)因?yàn)橹貜?fù)刪除而不一樣。

添加和修改:如果你不 t做冪等處理,可能會(huì)出現(xiàn)問題;多次添加可能導(dǎo)致多個(gè)相同的數(shù)據(jù)(主鍵是自動(dòng)生成的);如果只是將部分字段更新為固定值,不會(huì)出現(xiàn)冪等問題,但是如果新值需要在舊值上進(jìn)行處理和計(jì)算,比如增加多少,減少多少,那么重復(fù)執(zhí)行后結(jié)果就不一樣了。

消息不是等冪的。

1.生產(chǎn)者通常使用超時(shí)重傳機(jī)制向MQ發(fā)送消息,但是如果生產(chǎn)者 s消息已經(jīng)發(fā)出,但是由于網(wǎng)絡(luò)原因沒有收到確認(rèn)信息,可能會(huì)重新發(fā)送,最終導(dǎo)致消息重復(fù)發(fā)送。

2.消費(fèi)者消費(fèi)的過程也差不多。消費(fèi)者收到來自MQ的消息,但MQ沒有收到確認(rèn)消息,因此消息可能會(huì)重新發(fā)送給其他消費(fèi)者,或者網(wǎng)絡(luò)恢復(fù)后再次發(fā)送給消費(fèi)者,最終導(dǎo)致重復(fù)消費(fèi)。

03.解決辦法

1.唯一索引

使用唯一索引可以有效防止臟數(shù)據(jù)的添加:當(dāng)一個(gè)表中存在唯一索引時(shí),并發(fā)添加相同數(shù)據(jù)時(shí)會(huì)報(bào)錯(cuò),但這是在單個(gè)數(shù)據(jù)庫、單個(gè)表的情況下。只有等待后才有效。如果項(xiàng)目的數(shù)據(jù)量很大,采用將數(shù)據(jù)庫分表的策略,那么冪等性的問題就無法再通過數(shù)據(jù)庫的唯一索引來解決了。

2.全球唯一ID

每封郵件都帶有一個(gè)全球唯一的ID。當(dāng)消費(fèi)者收到消息時(shí),他在執(zhí)行之前判斷這個(gè)ID是否已經(jīng)在本地存在。如果不存在,他記錄執(zhí)行后的ID(存儲(chǔ)在數(shù)據(jù)庫或Redis中,表示交易已經(jīng)執(zhí)行)。如果已經(jīng)存在,說明該消息已經(jīng)被消費(fèi),不能再次執(zhí)行。

在許多分布式架構(gòu)中,全球唯一ID將被用作基本的微服務(wù)。當(dāng)然,這種服務(wù)的可靠性極高,或者可以由每個(gè)應(yīng)用程序使用并生成全局唯一的ID算法。然而,總的來說,實(shí)現(xiàn)引入全球唯一ID的方案仍然非常麻煩。

3.營(yíng)業(yè)狀況

為了保證消息的冪等性,也可以結(jié)合業(yè)務(wù)流程來考慮。例如,許多業(yè)務(wù)流程在每一步都是有狀態(tài)的。例如,在線購物可能包括:訂單創(chuàng)建、支付和交付,因此保單狀態(tài)為 "待定付款 "付款前,保單狀態(tài)可以更改為 "等待交付和付款后;然后,如果發(fā)起重復(fù)扣款,第二次扣款時(shí)保單狀態(tài)已經(jīng)改變,扣款失敗。

步驟4:復(fù)制表格

如果服務(wù)中有一個(gè)唯一的標(biāo)識(shí)符,您可以使用一個(gè)復(fù)制表將這個(gè)唯一的表示保存在復(fù)制表中。如果重復(fù)插入,將被檢查。

例如,在上面的場(chǎng)景中,一個(gè)訂單只會(huì)支付一次,所以在支付時(shí),將訂單號(hào)作為唯一標(biāo)識(shí)符保存在重復(fù)表中,以確保支付操作只會(huì)發(fā)生一次;這種方法也使用唯一ID,但與全局唯一ID不同,這個(gè)唯一ID是特定于特定業(yè)務(wù)的。

我會(huì)繼續(xù)分享我對(duì)Java開發(fā)、架構(gòu)設(shè)計(jì)、程序員職業(yè)發(fā)展等方面的看法,希望得到大家的關(guān)注。