阿里消息隊(duì)列rocketmq 如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?1.先上圖,明確一個(gè)消息發(fā)送和消費(fèi)的流程2.消息消息首先需要定義消息協(xié)議,比如ActiveMQ,Stomp,XMPP等3.消息協(xié)議定義好了,明確消息隊(duì)列需要滿足什么場(chǎng)景是否需
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
1.先上圖,明確一個(gè)消息發(fā)送和消費(fèi)的流程
2.消息消息首先需要定義消息協(xié)議,比如ActiveMQ,Stomp,XMPP等
3.消息協(xié)議定義好了,明確消息隊(duì)列需要滿足什么場(chǎng)景
是否需要保證消息可靠性,如果需要就要做存儲(chǔ)的高可用
是否需要支持同步和異步消息
是否需要保證消息的順序
是否需要支持延時(shí)消息
具體可以參照很多開源實(shí)現(xiàn)的特性,比如RocketMQ就是高可靠的,Kafka就是高吞吐量的,但是不是高可靠的。
搞Java的年薪40W是什么水平?
這種一看就是培訓(xùn)機(jī)構(gòu)跟你說的吧?具體年薪多少,那不是廣告宣傳說說就可以的,還得看你學(xué)完以后到底去的是哪個(gè)城市,什么類型的公司。一般的培訓(xùn)機(jī)構(gòu)都會(huì)把某一項(xiàng)技能夸的特別牛,事實(shí)卻可能是———然并卵
如何使用消息隊(duì)列解決分布式事務(wù)?
有兩種方案。
方案一 本地消息事務(wù)表
生產(chǎn)方需要增加一張事務(wù)消息表,具體步驟可以這樣實(shí)現(xiàn):
1.生產(chǎn)方執(zhí)行業(yè)務(wù)邏輯并在消息表中插入一條事務(wù)記錄,這兩個(gè)操作是在一個(gè)本地事務(wù)中的
2.啟動(dòng)一個(gè)后臺(tái)線程定時(shí)輪詢消息表,把消息發(fā)送給消息隊(duì)列
3.直到發(fā)送成功,刪除消息表中的記錄。
方案二 需要消息隊(duì)列支持,業(yè)務(wù)方提供回查接口
1.生產(chǎn)方發(fā)送prepared消息給消息隊(duì)列
2.在本地事務(wù)中業(yè)務(wù)邏輯
3.根據(jù)執(zhí)行結(jié)果,確認(rèn)或者取消prepared消息
4.消息隊(duì)列會(huì)確保一定會(huì)確認(rèn)或取消prelared消息的,消息隊(duì)列會(huì)不斷詢問生產(chǎn)方執(zhí)行結(jié)果,這個(gè)就需要生產(chǎn)方提供一個(gè)類似的回調(diào)函數(shù)。
方案二相當(dāng)消息隊(duì)列代替了方案一中消息表以及后臺(tái)線程輪詢的功能,但不是所有的消息隊(duì)列都支持該功能的。RocketMQ是支持的。
方案一開發(fā)工作量大些,對(duì)外部依賴性小
方案二開發(fā)量小,但是依賴特定消息隊(duì)列。