面試官:RocketMQ是什麼,它有什麼特性與使用場景?

曠世奇才927發表於2022-05-09

哈嘍!大家好,我是小奇,一位熱愛分享的程式設計師
小奇打算以輕鬆幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧
文章持續更新

一、前言

作為一名Java程式設計師,RocketMQ底層的一些原理是我們不必學會就可以搬磚工作的一種技能點,但是小奇為什麼還要講一下呢?難道就是為了浪費大家1分鐘的寶貴時間,一個人1分鐘,50萬人就是1年,5000萬人就是100年,賺了,小奇以一己之力成功搞掛一個人(血賺)。

當然不是,並且小奇的文章也沒有那麼多人看,最多也就浪費個吧。

學習RocketMQ底層原理是因為面試官要問啊!,所以我們就要學,什麼?不實用的你不學?那鄰居小奇可要使勁學啦,到時候面試官只要小奇不要你。

在這裡插入圖片描述

至於你問為什麼面試官要問RocketMQ底層原理呢,這個。。。我把這次機會留給你,下次你面試的時候面試官問:“講一下RocketMQ底層原理”。你:“面試官你好,請問為什麼你要問RocketMQ底層原理呢,你給我臺電腦,我五分鐘給你搭建好圖書管理系統他不香嗎,我們們鍵盤上見真章”。這時面試官就會告訴你答案,你就可以把答案打在評論區,讓小奇以及眾多小夥伴一起知道一下到底為什麼要問?

在這裡插入圖片描述

二、面試

在一個晴朗的週日,我來到了一個陌生的園區(別問為什麼是週日,問就是997,不過為了填飽肚子的打工人,只能明知山有虎、偏向虎山行),坐在陌生的會議室,等待HR小姐姐去叫面試官,此時我的心情和各位小夥伴一樣五味雜陳,擔心面試官問的會不會很難?問到我的知識盲區我該怎麼辦?一會自我介紹的時候要不要吹一下我和小奇的關係?

一位英俊瀟灑,眼神犀利的面試官走了進來,看到他那犀利、彷彿能看穿一切的眼神 ,我在想要不然一會就不要20k了,要8k得了,這個面試官一看就不好糊弄啊,但是我想起來我來之前剛看了小奇的趣學程式設計系列,我已經完全學會了小奇的精髓,我頓時就來了底氣,決定一會要30k,不給就學小奇賴著不走(哈哈)

面試官:小奇是吧,帶簡歷了嗎?

我:沒帶,現在彩印兩塊一張,我簡歷五張,每次面試都要花費十塊,我朋友說了還沒工作就先讓你掏錢的工作不要去。

面試官:。。。那你靠什麼來征服我,讓我錄用你

我:氣質?

請新增圖片描述

(此時面試官並沒有叫保安,而是從門後拿出了恭候我多時的棍子,我瞬間慫了)

在這裡插入圖片描述

我只好從我的雙肩包中拿出了我上午從其他公司面試官手中要回的簡歷,上午的情形是這樣的。


上午的面試官:今天的面試就到這吧,回去等通知吧!


我:面試官你好,如果貴公司不打算錄取我的話,能不能把我的紙質簡歷還給我,我下午還有一家面試。


上午的面試官:我說你的簡歷怎麼皺皺巴巴,原來你一直在迴圈利用啊!這個症狀出現多久了?


我:半拉月了。。。


(當我把皺皺巴巴的簡歷交給面試官後,這場面試才得以繼續進行。。。)

三、RocketMQ是什麼

面試官:我看你簡歷上寫的精通RocketMQ?(哼,面試官輕蔑的一笑)

我:本來不想寫精通的,但是同行們抬愛,非逼著寫,但是也無可厚非,雖說沒有到達爐火純青,但是也差不多登峰造極了吧。

面試官:呵呵、那你先說一說RocketMQ是什麼吧

我:RocketMQ是一個訊息佇列中介軟體,通過將訊息放入佇列中來實現解耦,削峰填谷等效果。

面試官:嗯,RocketMQ訊息模型是什麼樣子的?

我:RocketMQ中主要有三部分組成,分別是訊息生產端Producer、訊息儲存端Broker、和訊息消費端Consumer。

在這裡插入圖片描述

面試官:嗯,RocketMQ有哪些訊息傳送模式呢?

1、基本模式
基本模式中我們生產者可以通過三種不同的方式傳送訊息,分別是同步傳送、非同步傳送、單向傳送,其中同步傳送就是需要接收端響應接收到當前訊息後才能再次傳送訊息,而單向傳送是不需要等接收端響應接收到訊息就可以再次傳送的。
另外消費者消費訊息也有兩種模式,一種是消費者主動去Broker上拉取訊息的拉模式,另一種是消費者等待Broker把訊息推過來的推模式。

2、順序訊息傳送模式
順序模式就是保證訊息傳送到Broker的順序和消費者從Broker中消費的時候順序是有序的,那麼如果只有一個Broker的話肯定是有序的,如果多個Broker就無法保證有序性,所以RocketMQ保證的是訊息的區域性有序,並不能保證全域性有序。

在這裡插入圖片描述

3、廣播訊息傳送模式
廣播訊息傳送模式針對多個消費者來說並不是有一個消費者消費了訊息,這個訊息就沒有了,而是每個消費者都會消費到這一條訊息。就像我用大喇叭在村裡廣播說張寡婦王光棍的事情,我只說了一遍,但是村裡的人都聽到了,這就是廣播模式。
如果不用廣播模式,那麼我找到劉嬸跟她說了張寡婦和王光棍的事情,那麼也只有劉嬸她一個人知道(當然,劉嬸知道了後面全村最晚一夜之間就全知道了)

在這裡插入圖片描述

4、延遲訊息傳送模式
延遲訊息就是生產者傳送訊息後,訊息並沒有被及時的傳送出去,而是等過了一段時間才發出去。

比如我上面跟劉嬸說了一個八卦,我讓她不外傳,那她肯定做不到啊,我那隻能要求她一個小時之內不允許外傳,怎麼也得給我預留一個小時讓我逃跑啊

結果劉嬸說一個小時她忍不住,最後協商她只能忍五分鐘之內不說,那我也沒什麼好說的了,五分鐘我能跑二里地了,總比沒有時間強。

我還沒來得及跑呢,就看到劉嬸攔住了騎大梁自行車準備回家做飯的老林,老林從自行車上下來滿是期待的表情問:“劉嬸呀,什麼事啊,這麼神祕”。只見劉嬸看了一眼自己手上鍍金的小腕錶來了一句:“再等我四分半鐘,我給你說一個祕密”

我徹底服了,我們村不愧是人才村,個個都是人才。。。

在這裡插入圖片描述

5、批量訊息傳送模式
批量訊息傳送的意思就是將多條訊息合併成一個訊息,一次傳送出去。這樣的好處就可以減少網路IO的次數,提升了效率。

比如之前我在村裡說八卦的時候,我見了劉嬸
我說:“哎呀劉嬸呀,你可不知道”。
劉嬸:“我確實不知道呀,你啥都沒說呀”。
我說:“就我們們村的張寡婦啊,可真行”。
劉嬸:“張寡婦怎麼了,哪裡行,難道比我還。。。”。
我說:“還有我們村的王光棍,單身四十多年了,沒想到還有這本事呢”。
劉嬸:“啥本事啊,不是小奇你能一下說出來不,我快憋死了,快說到底啥事呀”。
我說:“就他倆在村東頭苞米地裡那啥”。
劉嬸:“那啥呀”。
我說:“我先回去吃飯了啊,吃完飯我再回來跟你說剩下的”。
劉嬸:“你這個兔崽子,你看我能讓你吃飯吃安省不,吊我的胃口,你找死”。

明明可以一下說明白的事,我非要演上一部60集的電視連續劇,馮導聽了都連連叫好啊。

6、過濾訊息傳送模式
在RocketMQ中我們可以使用Message的Tag屬性來過濾資訊,就是我們指定這個資訊哪個消費者可以收到,那麼它就可以收到,其他人收不到。

比如我發現村裡的八卦了,我忍不住想讓全村裡的人知道,那我就在村裡的微信群裡發一下不就行了,但是張寡婦和王光棍也在微信群裡呢,我這麼一發他們不就知道是我說的嘛。

那我只好先將他們兩個遮蔽了,然後把訊息發出去,然後瞬間群裡炸了鍋,只有他兩個人不知道發生了什麼。

7、事務訊息傳送模式
事務訊息是在分散式系統中保證最終一致性的兩階段提交的訊息實現,他可以保證本地事務執行與訊息傳送兩個操作的原子性。

這裡保證的是生產者傳送出去的訊息與生產者本地儲存的訊息要一致,比如我們購買商品下單,我們來簡單描述一下流程。

1、客戶下單。
2、程式生成一條訂單資訊(這個時候還沒有落庫)
3、這個時候向快遞服務傳送了一條訊息,讓快遞服務準備一下這條訂單的貨。
4、這個時候將生成的訂單資訊落到訂單服務的資料庫中

上面是一個正常的流程,但是如果訂單資訊落庫的時候失敗了呢。這個時候已經向快遞服務傳送了發快遞的訊息了,但是訂單服務落庫失敗,沒有這筆訂單,那就是白白發了一個快遞。回頭對賬對不上,領導宰了你的心都有了。

這個時候我們就需要進行一個事務的處理了,我們可以進行一個兩階段提交來保證事務。

在這裡插入圖片描述

面試官:小夥子真厲害啊,我這邊沒有什麼要問的了,你還有什麼問題要問(面試官兩眼放光)

我:額。。。面試官我現在可以走了嗎,我一會還有一個面試呢。

面試官:還面啥別的公司啊,就來我這吧,條件隨便開

我:那就100k吧(此時面試官又拿起了他準備好的棍子)

面試官:你要是不來就給我推薦一下,讓別人來我這面試一下

我:你先好好學習一下RocketMQ吧,今天幸虧只是我來了,如果是小奇的忠實讀者來了,你將會被虐的很慘的。(我將我的部落格地址留給了面試官,轉身留下了帥氣的背影,而面試官落寞無神的呆呆的坐在那裡,彷彿一個億離他而去。。。)

四、總結

這裡關於RocketMQ還沒有整理完畢,文章後面持續更新,建議收藏。

文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發現自己對命令是否真正的掌握了。

如果覺得我的文章還不錯的話就點個贊吧

相關文章