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