面試官:RabbitMQ怎么實現消費端限流
哈嘍!大家好,我是小奇,一位不靠譜的程序員

小奇打算以輕松幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧
文章持續更新
一、前言
RabbitMQ有很多高級特性,一般項目用不到,但是總有面試官會問到,被問到的時候我們要假裝這些對我們來說就是小意思一樣。
二、面試
面試官:小奇是吧,你先做一個自我介紹吧
我:面試官您好,我畢業于XXX,我之前在XXX工作,我精通XXX,總之一句話,我就是優秀,你問就完了。
面試官:行,你的自我介紹很強硬啊,那我看看你到底有沒有過硬的實力
我:是騾子是馬拉出來溜溜
三、RabbitMQ怎么實現消費端限流
面試官:好,那我先問你一個場景題,比如我們公司現在做了一個秒殺系統,在活動當天用戶下單太多了,造成消費端崩潰了,這種情況我們該怎么處理呢
我:好說呀,多買幾臺服務器,多搭建幾臺消費端的服務,減緩服務端的壓力,這樣不就沒有問題了嗎。
面試官:額。。。你這么說確實可以解決,實不相瞞我們老板特別摳。。。不舍得買更多的服務器,就想讓我們一臺服務器搞定
我:???光讓馬兒跑,不讓馬兒吃草,那特么能行啊,跟你們老板說,讓他自己出來頂著消費端的壓力吧,他不是不舍得花錢嗎,等秒殺的時候讓他去用戶那里搗亂,讓用戶不能夠同一時間下單不就行了。
面試官:哎呀不行呀,我們也想過給用戶搗亂,但是老板不讓,老板說必須讓用戶在最短的時間內都完成下單
我:可以啊,那就使用MQ,讓客戶端下單后將下單信息放入消息隊列中,然后讓消費端去處理唄。
面試官:哎呀我們就是這么弄的,但是消費端總是崩潰
我:你們消費端服務器配置怎么樣?
面試官:嗯。。消費端服務器配置是半核CPU、1G運行內存空間、10G磁盤空間
我: 半核? 你特么在逗我,另外半個CPU讓別人掰走了?
面試官:嘿嘿,情況就是這么個情況,事情就是這么個事情,反正公司就是窮困潦倒,等你進來了我再慢慢跟你講,你現在先幫我想一個解決方案,我用來應付一下老板
我:那就在消費端實現限流吧。
面試官:怎么實現呢?
我:使用channel.basicQos(int prefetchSize, int prefetchCount, boolean global)方法來設置限流的配置。
prefetchSize:表示消息的大小(0的話表示不限制大小)
prefetchCount:表示消息的數量
global:true表示該通道下的所有消費者都適用這個策略,而false表示只有當前這一個消費者適用這個策略。
如圖,這里我們channel.basicQos(0,1,false);表示不限制消息的大小,但是限制消息的數量,一次只能給消費者發送一條消息。
面試官:為什么不限流的話會將消費端搞掛掉呢
我:假如現在小明的媽媽有10個餃子給小明吃,小明叫來了9個同學,然后他們一共10個人,一人一個餃子都是一口就吃完了沒有任何問題,但是今天就小明一個人,總不能10個餃子一下塞到小明的嘴里面吧,這樣直接將小明噎死了。
面試官:那怎么解決呢
我:現在小明先吃一個餃子,等小明吃完了這一個餃子后告訴他媽,說我吃完了,然后他媽再給他一個餃子吃,這樣的話也是可以吃完10個餃子的,并且小明沒有事。
面試官:我看限流的參數還有數據大小是干什么的
我:假如現在小明媽媽為了讓小明一口就吃完十個餃子,他包了一個特別大的餃子,有一斤重,這個時候跟小明說還是一個餃子,一口悶吧,這個時候照樣將小明噎死了,所以數據大小也是要限制的。
面試官:那隊列怎么知道消費者消費完了一條消息,要給他再發送一條消息呢
我們要配置消費端手動確認,當我們消費端消費完消息后手動確認消息,這個時候隊列就認為整個消費流程走完了,就開始下一個信息的發送了。
開啟手動確認配置
代碼中手動確認。
這里手動確認有兩個參數,第一個是tag編號,就是這個消息的一個編號,第二個參數為是否確認多條,true的話就是確認多條消息,false的話就是只確認這一條消息,一般我們都是false。
面試官:可以呀小伙子,有點東西
我:請你不要迷戀哥,哥只是一個傳說。。。
面試官:小伙子真厲害啊,一下子就把RabbitMQ消費端限流講明白了,你面試通過了,明天上崗吧
我:啊,這么急嗎,我后面還有好多東西沒有講呢。
面試官:不著急,進來了以后慢慢聽你講,加班讓你跟我講
我:啊。。。這也太難了吧
四、總結
這里關于RabbitMQ還沒有整理完畢,文章后面持續更新,建議。
文章中涉及到的命令大家一定要像我一樣每個都敲幾遍,只有在敲的過程中才能發現自己對命令是否真正的掌握了。
如果覺得我的文章還不錯的話就點個贊吧
RabbitMQ
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。