rocketmq

基本概念

topic:消息主題风钻,通過 Topic 對不同的業(yè)務(wù)消息進(jìn)行分類。
tag:消息標(biāo)簽,用來進(jìn)一步區(qū)分某個(gè) Topic 下的消息分類绍赛,消息從生產(chǎn)者發(fā)出即帶上的屬性蔓纠。
keys:代表這條消息的業(yè)務(wù)關(guān)鍵詞
body:表示消息的存儲內(nèi)容

順序消息

對于一個(gè)指定的Topic,消息嚴(yán)格按照先進(jìn)先出(FIFO)的原則進(jìn)行消息發(fā)布和消費(fèi)吗蚌,即先發(fā)布的消息先消費(fèi)腿倚,后發(fā)布的消息后消費(fèi)。
RocketMQ 消息的順序性分為兩部分蚯妇,生產(chǎn)順序性和消費(fèi)順序性敷燎。只有同時(shí)滿足了生產(chǎn)順序性和消費(fèi)順序性才能達(dá)到上述的FIFO效果。
生產(chǎn)順序性: RocketMQ 通過生產(chǎn)者和服務(wù)端的協(xié)議保障單個(gè)生產(chǎn)者串行地發(fā)送消息箩言,并按序存儲和持久化硬贯。如需保證消息生產(chǎn)的順序性,則必須滿足以下條件:

單一生產(chǎn)者: 消息生產(chǎn)的順序性僅支持單一生產(chǎn)者陨收,不同生產(chǎn)者分布在不同的系統(tǒng)饭豹,即使設(shè)置相同的分區(qū)鍵,不同生產(chǎn)者之間產(chǎn)生的消息也無法判定其先后順序务漩。
串行發(fā)送:生產(chǎn)者客戶端支持多線程安全訪問拄衰,但如果生產(chǎn)者使用多線程并行發(fā)送,則不同線程間產(chǎn)生的消息將無法判定其先后順序饵骨。
例如創(chuàng)建訂單的場景翘悉,需要保證同一個(gè)訂單的生成、付款和發(fā)貨宏悦,這三個(gè)操作被順序執(zhí)行镐确。如果是普通消息,訂單A的消息可能會被輪詢發(fā)送到不同的隊(duì)列中饼煞,不同隊(duì)列的消息將無法保持順序源葫,而順序消息發(fā)送時(shí)將ShardingKey相同(同一訂單號)的消息序路由到一個(gè)邏輯隊(duì)列中。

延遲消息

當(dāng)消息寫入到Broker后砖瞧,不能立刻被消費(fèi)者消費(fèi)息堂,需要等待指定的時(shí)長后才可被消費(fèi)處理的消息
Rocket MQ延時(shí)消息的延遲時(shí)長不支持隨意時(shí)長的延遲,是通過特定的延遲等級來指定的块促。默認(rèn)支持18個(gè)等級的延遲消息
例如指定的延時(shí)等級為2荣堰,則表示延遲時(shí)長為5s,延時(shí)等級為3竭翠,則表示延遲時(shí)長為10s振坚,即延遲等級是從1開始計(jì)數(shù)的。

延遲消息使用場景

  • 在電商交易系統(tǒng)中斋扰,像淘寶渡八、京東啃洋,我們提交了一個(gè)訂單之后,在支付時(shí)都會
    提示屎鳍,需要在指定時(shí)間內(nèi)(例如30分鐘)完成支付宏娄,否則訂單將被取消的消息,
    實(shí)際上這個(gè)超時(shí)未支付功能就可以使用延時(shí)消息來實(shí)現(xiàn)逮壁。在下單成功之后孵坚,就
    發(fā)送一個(gè)延時(shí)消息,然后指定消息的延時(shí)時(shí)間為30分鐘窥淆,這條消息將會在30
    分鐘后投遞給后臺業(yè)務(wù)系統(tǒng)(Consumer),此時(shí)才能被消費(fèi)者進(jìn)行消費(fèi)卖宠,消
    費(fèi)消息的時(shí)候會再去檢查這個(gè)訂單的狀態(tài),確認(rèn)下是否支付成功祖乳,如果支付成
    功逗堵,則忽略不處理;如果訂單還是未支付眷昆,則進(jìn)行取消訂單蜒秤、釋放庫存等操
    作;
  • 比如B站視頻投稿經(jīng)常會發(fā)起一些活動亚斋,Up主在活動期間可以按照活動規(guī)則投
    稿視頻作媚,在活動時(shí)間截止后,后臺根據(jù)Up主完成任務(wù)的情況以及結(jié)合投稿視頻
    的播放量等進(jìn)行判定帅刊,然后派發(fā)對應(yīng)的獎勵纸泡。這種場景我們也可以采用延時(shí)消
    息來實(shí)現(xiàn),即在發(fā)起活動后赖瞒,同時(shí)發(fā)送一條延時(shí)消息女揭,延時(shí)時(shí)間設(shè)置為本次活
    動周期的時(shí)間。當(dāng)活動結(jié)束后栏饮,這條延時(shí)消息剛好可以被消費(fèi)者進(jìn)行消費(fèi)吧兔,這
    樣就可以消費(fèi)消息然后執(zhí)行一系列的邏輯處理。

RocketMq中提供兩種消費(fèi)模式:集群模式和廣播模式

集群模式表示同一個(gè)消息會被同一個(gè)消費(fèi)組中的消費(fèi)者消費(fèi)一次袍嬉,消息被負(fù)載均衡分配到同一個(gè)消費(fèi)者上的多個(gè)實(shí)例上境蔼。
廣播模式表示同一個(gè)消息會推送到集群里面所有的消費(fèi)者,保證消息至少被每個(gè)消費(fèi)者消費(fèi)一次伺通。

并發(fā)消費(fèi)和順序消費(fèi)

  • 在并發(fā)消費(fèi)中箍土,可能會有多個(gè)線程同時(shí)消費(fèi)一個(gè)隊(duì)列的消息,因此即使發(fā)送端通過發(fā)送順序消息保證消息在同一個(gè)隊(duì)列中按照FIFO的順序罐监,也無法保證消息實(shí)際被順序消費(fèi)吴藻。實(shí)現(xiàn)了MessageListenerConcurrently接口

  • 順序消費(fèi)是指消息按照一定的順序進(jìn)行處理,同一個(gè)消息隊(duì)列上的消息按照發(fā)送順序和消費(fèi)順序進(jìn)行處理弓柱。
    順序消費(fèi)通常需要保證同一消息隊(duì)列上只有一個(gè)消費(fèi)者實(shí)例處理消息沟堡,以確保消息的順序性疮鲫。實(shí)現(xiàn)了MessageListenerOrderly接口

其他

  • NameServer:NameServer 是一個(gè)非常簡單的 Topic 路由注冊中心,是一個(gè)無狀態(tài)的服務(wù)器弦叶,角色類似于 Kafka 使用的 Zookeeper,但比 Zookeeper 更輕量妇多。支持 Broker 的動態(tài)注冊與發(fā)現(xiàn)伤哺。
  • Broker:初始化加載本地配置,配置信息是以json格式存儲在本地者祖, rocketmq強(qiáng)依賴fastjson作轉(zhuǎn)換立莉, 通過ConfigMananger來管理配置加載以及持久化,主要負(fù)責(zé)消息的存儲、投遞和查詢以及服務(wù)高可用保證七问。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜓耻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子械巡,更是在濱河造成了極大的恐慌刹淌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讥耗,死亡現(xiàn)場離奇詭異有勾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)古程,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蔼卡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挣磨,你說我怎么就攤上這事雇逞。” “怎么了茁裙?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵塘砸,是天一觀的道長。 經(jīng)常有香客問我呜达,道長谣蠢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任查近,我火速辦了婚禮眉踱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘霜威。我一直安慰自己谈喳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布戈泼。 她就那樣靜靜地躺著婿禽,像睡著了一般赏僧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扭倾,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天淀零,我揣著相機(jī)與錄音,去河邊找鬼膛壹。 笑死驾中,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的模聋。 我是一名探鬼主播肩民,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼链方!你這毒婦竟也來了持痰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤祟蚀,失蹤者是張志新(化名)和其女友劉穎工窍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暂题,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡移剪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薪者。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片久信。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡没龙,死狀恐怖毕谴,靈堂內(nèi)的尸體忽然破棺而出进副,到底是詐尸還是另有隱情,我是刑警寧澤悬槽,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布怀吻,位于F島的核電站,受9級特大地震影響初婆,放射性物質(zhì)發(fā)生泄漏蓬坡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一磅叛、第九天 我趴在偏房一處隱蔽的房頂上張望屑咳。 院中可真熱鬧,春花似錦弊琴、人聲如沸兆龙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紫皇。三九已至慰安,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聪铺,已是汗流浹背化焕。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铃剔,地道東北人锣杂。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像番宁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子赖阻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容