rocketmq消息確認(rèn)機(jī)制 如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?1. 在上圖中定義發(fā)送和使用消息的過(guò)程2。首先定義消息協(xié)議,如ActiveMQ、stomp、XMPP等3。定義消息協(xié)議,定義消息隊(duì)列需要滿足的場(chǎng)景是否要保證消息的可靠性,必要
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
1. 在上圖中定義發(fā)送和使用消息的過(guò)程
2。首先定義消息協(xié)議,如ActiveMQ、stomp、XMPP等
3。定義消息協(xié)議,定義消息隊(duì)列需要滿足的場(chǎng)景
是否要保證消息的可靠性,必要時(shí)要保證存儲(chǔ)的高可用性
是否要支持同步和異步消息
是否要保證消息隊(duì)列例如rocketmq是高可靠性,卡夫卡是高吞吐量,但不高可靠性。
消息隊(duì)列,如何保證消息不被重復(fù)消費(fèi)?
現(xiàn)在消息機(jī)制一般是通過(guò)中間件實(shí)現(xiàn)的,如Kafka、ActiveMQ等。一般來(lái)說(shuō),有兩種消費(fèi)策略:至少一次和最多一次。
首先,至少一次。在這種情況下,使用消息很重要,不能容忍丟失。使用者從中間件集群中提取消息,在內(nèi)部消費(fèi),并將消費(fèi)結(jié)果通知集群。如果用戶計(jì)算機(jī)重新啟動(dòng)或網(wǎng)絡(luò)丟失數(shù)據(jù)包,此時(shí)將提取重復(fù)的消息。一般的解決方案是保證對(duì)使用者業(yè)務(wù)邏輯進(jìn)行冪等處理。
第二,至少再來(lái)一次。此時(shí),消息可能會(huì)丟失,并且不會(huì)重復(fù)消費(fèi)。
作為接收器,保持接口冪等是一項(xiàng)基本功能。它可以處理一些意外情況,例如集群失敗,或者需要跟蹤消息數(shù)據(jù)的歷史以便重新處理等。