国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

RocketMQ順序消息解析!

開發 前端
順序消息是消息隊列 RocketMQ 提供的一種高級消息類型。對于一個指定的Topic,消息嚴格按照先進先出(FIFO)的原則進行消息發布和消費。

順序消息是消息隊列 RocketMQ 提供的一種高級消息類型。

對于一個指定的Topic,消息嚴格按照先進先出(FIFO)的原則進行消息發布和消費。

  • 即先發送的消息先消費,后發送的消息后消費。

順序消息適用于對消息發送和消費順序有嚴格要求的情況。

應用場景

順序消息和普通消息的對比如下:

消息類型

消費順序

性能

適用場景

普通消息

無順序

適用于對吞吐量要求高,且對生產和消費順序無要求

順序消息

指定的 Topic 內的消息遵循先入先出(FIFO)規則

一般

吞吐量要求一般

但是要求特定的 Topic 嚴格地按照 FIFO 原則進行消息發布和消費的場景

訂單創建場景:

在一些電商系統中,同一個訂單相關的創建訂單消息、訂單支付消息、訂單退款消息、訂單物流消息。

必須嚴格按照先后順序來進行生產或者消費,否則消費中傳遞訂單狀態會發生紊亂,影響業務的正常進行。

因此,該訂單的消息必須按照一定的順序在客戶端和消息隊列中進行生產和消費。

  • 同時消息之間有先后的依賴關系,后一條消息需要依賴于前一條消息的處理結果。

順序消息分為全局有序和局部有序。

全局有序

可以為Topic設置一個消息隊列,使用一個生產者單線程發送數據,消費者端也使用單線程進行消費。

從而保證消息的全局有序,但是這種方式效率低,一般不使用。

圖片

局部有序

假設一個Topic分配了兩個消息隊列,生產者在發送消息的時候,可以對消息設置一個路由ID。

  • 比如想保證一個訂單的相關消息有序,那么就使用訂單ID當做路由ID。

在發送消息的時候,通過訂單ID對消息隊列的個數取余,根據取余結果選擇消息隊列。

  • 這樣同一個訂單的數據就可以保證發送到一個消息隊列中。

消費者端使用MessageListenerOrderly處理有序消息。

這就是RocketMQ的局部有序,保證消息在某個消息隊列中有序。

圖片圖片

實現原理

消費者在啟動時會調用DefaultMQPushConsumerImpl的start方法。

圖片圖片

在DefaultMQPushConsumerImpl的start方法中,對消息監聽器類型進行了判斷。

如果類型是MessageListenerOrderly表示要進行順序消費。

此時使用ConsumeMessageOrderlyService對ConsumeMessageService進行實例化。

  • 然后調用它的start方法進行啟動。

圖片圖片

加鎖定時任務

進入到ConsumeMessageOrderlyService的start方法中。

可以看到,如果是集群模式,會啟動一個定時加鎖的任務,周期性的對訂閱的消息隊列進行加鎖。

具體是通過調用RebalanceImpl的lockAll方法實現的。

圖片圖片

為什么集群模式下需要加鎖?

因為廣播模式下,消息隊列會分配給消費者下的每一個消費者。

而在集群模式下,一個消息隊列同一時刻只能被同一個消費組下的某一個消費者進行。

  • 所以在廣播模式下不存在競爭關系,也就不需要對消息隊列進行加鎖。

而在集群模式下,有可能因為負載均衡等原因將某一個消息隊列分配到了另外一個消費者中。

  • 因此在集群模式下就要加鎖,當某個消息隊列被鎖定時,其他的消費者不能進行消費。

整個順序消費過程涉及了三把鎖,它們分別對應不同的情況。

向Broker申請的消息隊列鎖

集群模式下一個消息隊列同一時刻只能被同一個消費組下的某一個消費者進行。

為了避免負載均衡等原因引起的變動,消費者會向Broker發送請求對消息隊列進行加鎖。

如果加鎖成功,記錄到消息隊列對應的ProcessQueue中的locked變量中,它是boolean類型的。

public class ProcessQueue {
    private volatile boolean locked = false;
}

消費者處理拉取消息時的消息隊列鎖

消費者在處理拉取到的消息時,由于可以開啟多線程進行處理。

所以處理消息前通過MessageQueueLock中的mqLockTable獲取到了消息隊列對應的鎖。

鎖住要處理的消息隊列,這里加消息隊列鎖主要是處理多線程之間的競爭。

public class MessageQueueLock {
    private ConcurrentMap<MessageQueue, Object> mqLockTable =
        new ConcurrentHashMap<MessageQueue, Object>();

消息消費鎖

消費者在調用consumeMessage方法之前會加消費鎖。

主要是為了避免在消費消息時,由于負載均衡等原因,ProcessQueue被刪除。

public class ProcessQueue {
    private final Lock consumeLock = new ReentrantLock();
}

圖片圖片

順序消息缺陷

消費順序消息的并行度依賴于隊列的數量。

隊列熱點問題,個別隊列由于哈希不均導致消息過多,消費速度跟不上,產生消息堆積問題。

遇到消息失敗的消息,無法跳過,當前隊列消費暫停。

熱點問題,只能通過拆分MessageQueue和優化路由方法來盡量均衡的將消息分配到不同的MessageQueue。

消費并行度理論上不會有太大問題,因為MessageQueue的數量可以調整。

消費失敗的無法跳過是不可避免的。

因為跳過可能導致后續的數據處理都是錯誤的。

不過可以提供一些策略,由用戶根據錯誤類型來決定是否跳過,并且提供重試隊列之類的功能。

  • 在跳過之后用戶可以在其他地方重新消費到這條消息。

資料分享:

參考:

丁威、周繼鋒《RocketMQ技術內幕》

https://rocketmq.apache.org/zh/docs/featureBehavior/03fifomessage/

責任編輯:武曉燕 來源: 月伴飛魚
相關推薦

2024-10-29 08:34:27

RocketMQ消息類型事務消息

2021-04-15 09:17:01

SpringBootRocketMQ

2024-09-25 08:32:05

2024-08-22 18:49:23

2023-12-15 13:08:00

RocketMQ中間件消費順序

2021-07-13 11:52:47

順序消息RocketMQkafka

2023-09-04 08:00:53

提交事務消息

2022-06-27 11:04:24

RocketMQ順序消息

2024-10-11 09:15:33

2024-11-11 00:00:10

2022-12-22 10:03:18

消息集成

2023-12-04 09:23:49

分布式消息

2023-12-21 08:01:41

RocketMQ消息堆積

2022-03-31 08:26:44

RocketMQ消息排查

2023-07-18 09:03:01

RocketMQ場景消息

2023-07-17 08:34:03

RocketMQ消息初體驗

2025-04-09 08:20:00

RocketMQ消息隊列開發

2022-06-02 08:21:07

RocketMQ消息中間件

2023-09-21 09:02:03

RocketMQ全局有序局部有序

2020-11-13 16:40:05

RocketMQ延遲消息架構
點贊
收藏

51CTO技術棧公眾號

日产国产高清一区二区三区| 久久99在线观看| 国产h在线观看| 中日韩免费视频中文字幕| 国产精品乱码一区二三区小蝌蚪| 色婷婷综合久久久久中文| 久久99精品久久久久久噜噜| 青青草视频在线免费观看| 日本午夜精品理论片a级appf发布| 中文字幕最新精品| 久久影视电视剧免费网站清宫辞电视 | 丝袜美腿一区二区三区动态图| 欧美成人影院| 四季av一区二区凹凸精品| 久久久久高清精品| 婷婷亚洲五月色综合| 亚洲黄页一区| 1024成人网| 综合激情国产一区| 成人羞羞视频免费| a级毛片免费观看在线| 欧美 日韩 国产一区二区在线视频| av高清久久久| 69堂成人精品免费视频| 国产69精品久久久久99| 欧美日韩三级一区二区| 亚洲欧美国产另类| 麻豆av一区二区三区| 久久天天狠狠| 日韩高清电影免费| 欧美色道久久88综合亚洲精品| 亚洲三级免费| 超碰91人人草人人干| 露出调教综合另类| 精品亚洲va在线va天堂资源站| 国产熟女高潮视频| 欧美激情精品久久久六区热门| 最新亚洲伊人网| 日韩va亚洲va欧美va久久| 中文字幕一区日韩精品欧美| 狠狠久久综合婷婷不卡| 蜜桃视频网站www| 亚洲午夜免费| 国产精品视频九色porn| 欧美午夜小视频| 网曝91综合精品门事件在线| 色99之美女主播在线视频| 澳门成人av网| 中文av字幕一区| 少妇高清精品毛片在线视频| 欧美综合在线视频观看| 欧美日韩国产精品成人| 午夜成在线www| 狠狠躁天天躁日日躁欧美| 久久国产精品久久| 福利一区和二区| 亚洲午夜精品网| 久久久久综合一区二区三区| 亚洲午夜伦理| 精品激情国产视频| 人成在线免费视频| 色视频欧美一区二区三区| 永久免费看av| 伊人精品一区| 精品少妇一区二区三区视频免付费 | 真不卡电影网| 欧美性xxxxxxxxx| 久草在线青青草| 高清久久久久久| 国产精品久久久久久亚洲调教| 成人午夜在线观看视频| 99精品视频在线播放观看| 成人字幕网zmw| 欧美片第一页| 久久不射热爱视频精品| 欧美毛片免费观看| 亚洲免费av电影| 日本免费成人| 日韩一二三四区| av在线不卡播放| 精品亚洲成a人在线观看| 国产精品午夜视频| 久草免费在线播放| 麻豆tv入口在线看| 国产黄色免费网| 日韩av懂色| 日韩免费一区二区三区| 黄色一级影院| 一本久道久久综合狠狠爱| 国模大尺度私拍在线视频| 国产精品你懂的在线| 中文字幕在线免费专区| 日韩午夜av电影| 日韩新的三级电影| 日本精品久久电影| 亚洲专区一区二区三区| 国内成人精品一区| 精品久久久久久久久久久久久久| 成人区精品一区二区| 国产日韩欧美不卡在线| 99热在线免费观看| 午夜久久久久久电影| 免费观看在线午夜影视| 欧美一进一出视频| 久久久夜精品| 中文字幕在线影院| 久热精品视频在线免费观看 | 日本亚洲视频| 亚洲视频狠狠干| 国产精品一区二区电影| 欧美日韩五区| 久久久精品综合| 水蜜桃一区二区| 91视频综合| 日韩av在线一区二区三区| 国产一区不卡视频| 日韩成人在线视频网站| 国产美女免费观看| 中文字幕一区二区三区四区不卡| 国产精品3区| 夜夜操天天操亚洲| 蜜桃传媒在线观看免费进入| 亚洲国产高潮在线观看| 97人人做人人爽香蕉精品| 亚洲熟妇av一区二区三区| 国产日产久久高清欧美一区| 久久国产精品免费| 中文字幕av在线播放| 亚洲欧美日韩第一区| 色婷婷色综合| 亚洲精品成人a在线观看| 国产精品xxxxx| 最近97中文超碰在线| 欧美zozo另类异族| 成人97人人超碰人人99| 欧美另类高清videos| 国产精品日韩精品在线播放| 日韩精品一区二区三区色欲av| 欧美久久久久中文字幕| 一本—道久久a久久精品蜜桃| 日韩国产一区| 91免费黄视频| 亚洲国产天堂久久综合| 秋霞国产精品| 麻豆av一区二区三区| 欧美在线免费观看亚洲| 国产美女在线观看| 亚洲福利在线观看| 国产综合精品一区| 少妇熟女一区二区| 日韩视频免费观看高清在线视频| 伊人久久大香线| 日韩免费电影一区二区| 在线亚洲一区二区| 久久大胆人体| 奇米精品在线| 欧美一区二区网站| 国产精久久久| 国产综合中文字幕| 亚洲天堂影视av| 亚洲警察之高压线| 特级丰满少妇一级| 欧美在线看片a免费观看| 欧美一区电影| 中文字幕在线亚洲精品| 26uuu亚洲综合色| 亚洲一区在线日韩在线深爱| 在线综合+亚洲+欧美中文字幕| 亚洲欧美色图| 2021av在线| 欧美黑人xxxx| 亚洲国产精品久久久久蝴蝶传媒| 欧洲精品亚洲精品| 欧美成人一区二区三区片免费| 欧美中文日韩| 97在线免费| 精品人在线二区三区| 国产精品久久久亚洲一区| 婷婷无套内射影院| 免费av一区二区| 国产精品毛片一区二区三区| 四虎久久免费| 欧美激情videoshd| 亚洲视频在线观看一区| 久久国产影院| 在线看女人毛片| 国产成人精品网站| 久久99蜜桃精品| 欧美a一级片| 久久综合福利| 日韩电影中文字幕在线观看| 国产成人免费在线| 青青青草网站免费视频在线观看| a级国产乱理论片在线观看99| 久久伊人中文字幕| 午夜av在线播放| 国产精品久久综合av爱欲tv| 午夜欧美在线一二页| 日韩制服丝袜先锋影音| 91丨精品丨国产|