rocketmq 訊息佇列

2022-07-03 14:30:19 字數 1084 閱讀 8637

rocketmq(是乙個分布式的訊息佇列,主要有product, broker,consumer,nameserver組成,提供流量的削峰填谷,非同步通知,應用解耦的功能。rocketmq和kafka功能上比較相似,但是在底層架構上還是有很多不同, 比如kafka中每個topic下的每個partition對應乙個檔案,但是rocketmq中在乙個broker上的topic的所有messagequeue都共用乙個檔案,由此帶來的乙個問題是在kafka中,當一台broker上的partiton很多的時候,磁碟會退化為隨機寫,但是在rocketmq上不會有這個問題。 但是兩者都存在的乙個問題是,consumer的能力沒有辦法線性擴充套件,當訊息佇列中積壓訊息的時候,不能通過增加機器的數量來擴大消費能力,consumer的數量受制於partiton/messagequeue的數量。 

這裡主要講rocketmq四個問題:

順序訊息

在傳送端可以在呼叫send方法的時候指定messagequeue, 可以利用key hash的方式,保證相同的key落在同乙個messagequeue, 如果要保證全域性唯一,整個topic可以只有乙個messagequeu。在消費端,rocketmq提供了順序消費的方法。以上只是在理想情況下唯一,網路抖動,broker切換都有可能導致訊息不是順序,使用時需要注意。

事物訊息

實現方式類似於2pc

1. product傳送half訊息到broker

2. product根據broker返回的結果,成功或者失敗,決定是否執行本地事物。

3. 執行本地事物,根據本地事物結果,決定向broker傳送commit或者rollback。 

4. 如果第二步返回,或者第三步提交commit/rollback出現網路問題,broker會回查product, product根據回查決定是否重新提交。 

消費失敗問題

rocketmq通過提交offset的方式來表示是否已經消費,在提交的時候會提交乙個本地最小的offset,表示小於此offset的都已消費。 對於消費失敗的訊息,會提交到重試佇列,重試佇列在重試16次後,如果還失敗,會投遞到死信佇列。 

消費者如何獲取訊息

消費者是通過長連線的方式拉取訊息

具體可以參考我的註解版:

訊息佇列之RocketMq

rocketmq 是阿里巴巴在2012年開源的分布式訊息中介軟體,有點什麼的就不多說了,就直接將怎麼用。rocketmq大概就是真麼一種結構,具體的使用流程就是,訊息生產者 producer 將訊息發布到訊息中心,消費者 consumer 啟動監聽,當監聽到訊息時去訊息中心拿訊息。而nameserv...

訊息佇列 RocketMQ 01

訊息佇列中介軟體是分布式系統中重要的元件,它主要解決的問題是 應用解耦 非同步訊息 流量削鋒等問題。實現高效能,高可用,可伸縮和最終一致性架構。目前使用較多的訊息佇列有 activemq rabbitmq zeromq kafka metamq rocketmq等。訊息即資料。一般訊息的體量不會很大...

訊息佇列(三)RocketMQ如何儲存訊息

rocket的訊息是有consume queue和commit log組成。consume queue consume queue是訊息的邏輯佇列,相當於字典目錄,用來指定訊息在物理檔案 commit log 上的位置,我們可以在配置中指定consumequeue和commitlog儲存的目錄。每乙...