日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rocketmq queue_RocketMQ 实战(三) - 消息的有序性

發(fā)布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rocketmq queue_RocketMQ 实战(三) - 消息的有序性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

■ RocketMQ有序消息的使用

1 為什么需要消息的有序性

比如用戶張三終于掙了一百存在在銀行卡里存取款,對應(yīng)兩個異步的短信消息,肯定要保證先存后取吧,不然都沒錢怎么發(fā)了取錢的消息呢! M1 - 存錢 M2 - 取錢

而mq默認(rèn)發(fā)消息到不同q顯然是行不通的,會亂序 需要發(fā)往同一個q,先進(jìn)先出

2 有序消息的基本概念

有序消息又叫順序消息(FIFO 消息) 是指消息的消費(fèi)順序和產(chǎn)生順序相同,在有些業(yè)務(wù)邏輯下,必須保證順序。

比如訂單的生成、付款、發(fā)貨,這個消息必須按順序處理才行。 順序消息分為全局順序和分區(qū)(queue)順序

2.1 全局順序

概念

一個Topic內(nèi)所有的消息都發(fā)布到同一個queue,按照先進(jìn)先出的順序進(jìn)行發(fā)布和消費(fèi)

適用場景

性能要求不高,所有的消息嚴(yán)格按照FIFO原則進(jìn)行消息發(fā)布和消費(fèi)的場景

2.2 分區(qū)順序

概念

對于指定的一個Topic,所有消息根據(jù)sharding key進(jìn)行區(qū)塊(queue)分區(qū)

同一個queue內(nèi)的消息按照嚴(yán)格的FIFO順序進(jìn)行發(fā)布和消費(fèi)

Sharding key是順序消息中用來區(qū)分不同分區(qū)的關(guān)鍵字段,和普通消息的 Key是完全不同的概念

適用場景

性能要求高,根據(jù)消息中的sharding key去決定消息發(fā)送到哪-個queue

2.3 全局順序與分區(qū)順序?qū)Ρ?/h2>

發(fā)發(fā)送方式對比

3 如何保證消息順序

在MQ的模型中,順序需要由3個階段去保障

  • 消息被發(fā)送時保持順序
  • 消息被存儲時保持和發(fā)送的順序一致
  • 消息被消費(fèi)時保持和存儲的順序一致
  • 4 RocketMQ 的有序消息實現(xiàn)原理

    RocketMQ消費(fèi)端有兩種類型:

    • MQPullConsumer
    • MQPushConsumer

    底層都是通過pull機(jī)制去實現(xiàn),pushConsumer是一種API封裝

    MQPullConsumer 由用戶控制線程,主動從服務(wù)端獲取消息,每次獲取到的是一個MessageQueue中的消息。

    PullResult中的 List<MessageExt> msgFoundList自然和存儲順序一致,用戶需要再拿到這批消息后自己保證消費(fèi)的順序。

    MQPushConsumer由用戶注冊MessageListener來消費(fèi)消息,在客戶端中需要保證調(diào)用MessageListener時消息的順序性

    看源碼

    • 拉取生產(chǎn)端消息

    • 判斷是并發(fā)的還是有序的,對應(yīng)不同服務(wù)實現(xiàn)類

    5 有序消息的缺陷

    發(fā)送順序消息無法利用集群的Failover特性,因為不能更換MessageQueue進(jìn)行重試

    因為發(fā)送的路由策略導(dǎo)致的熱點(diǎn)問題,可能某一些MessageQueue的數(shù)據(jù) 量特別大 ◆ 消費(fèi)的并行讀依賴于queue數(shù)量 ◆ 消費(fèi)失敗時無法跳過

    6 使用

    見官網(wǎng)Order-example

    總結(jié)

    以上是生活随笔為你收集整理的rocketmq queue_RocketMQ 实战(三) - 消息的有序性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。