提到訊息佇列可能一些朋友經常聽別人說起一些名詞,比如:服務程式解耦,處理流量削峰,通過異步處理提升用戶體驗,緩沖批處理提高處理性能,筆者擅于白話解說,所以我就不用專業的術語去解釋專業的問題了,我一直覺得訊息佇列的功能和快遞柜的功能非常相似,怎么個相似法呢?讓我來詳細給你說說,
一、白話訊息佇列
我們來將快遞柜與訊息佇列做一個對比
- 訊息佇列比作快遞柜:有很多廠家生產快遞柜,如:豐巢(apache kafka),速遞易(alibaba RocketMQ),近鄰寶(ActiveMQ)等等,反正常用的就這幾個,快遞柜負責臨時保存郵件,訊息佇列負責臨時保存訊息資料,
- 快遞員比作訊息生產者:快遞員負責向快遞柜投遞郵件,生產者負責向訊息佇列投遞訊息,異曲同工之妙啊!
- 消費者比作訊息消費者: 可能是這個例子太貼切了,以至于這句怎么看都是廢話,廢話也還是要說,生活中的消費者取郵件,程式中的消費者取訊息資料,

二、快遞柜(訊息佇列)帶來的好處
我們先回顧一下在沒有快遞柜的日子里是怎么度過的:某天早上突然接到快遞員電話:"兄弟,有你的快遞啊",心里想真糟糕:“你早不來晚不來,我馬上就要上班了,你這個時候來,好吧,我等你一會”,結果有可能快遞員很不靠譜,一會說堵車,一會說馬上到,等來等去你上班遲到了,這種情況讓你很崩潰!
突然有一天,小區里突然出現了一個叫做快遞柜的東西,這東西好啊,"兄弟,有你快遞啊",心想誰是你兄弟:"啊,你放快遞柜里面吧,我晚上下班回來取",快遞員愉快的把快遞放入快遞柜,開始打下一個電話,一早上10個郵件,如果每個都送上門快遞員最少要半小時,現在好了,9個放快遞柜,1個用戶要求送上門,10分鐘就搞定了,快遞員覺得這個東東真的很好!
快遞員高興了,消費者用戶其實也很滿意,有的購物狂一天有可能收10來個郵件,沒有快遞柜的時候,快遞員來一個電話就去取一次(等一次)快遞,有了快遞柜,下班的時候就一起全都取了,上面的例子,體現了訊息佇列(快遞柜)的幾個優越性,請讀者仔細品評:
- 異步解耦:有了快遞柜,消費者不用等待快遞員,用戶體驗增強,消費者與生產者(快遞員)之間解耦,不會因為對方的操作行為,影響自己獨立處事的程式,用戶不用疲于等待與接收事件阻塞耗時,
- 流量削峰:我們假定一種極端的情況,你通過各個渠道買了1000本書,突然某一小時集中的給你打電話,你肯定不具備一個小時收1000個郵件的能力,所以你讓快遞員將郵件放入快遞柜,所以你就可以按照自己的處理能力,按照自己的時間安排去取郵件,同樣我們的消費者程式在面臨多用戶、高并發的請求情況下,將資料放入訊息佇列保存可以將流量資料削峰,按照程式能夠處理的能力和資源進行資料消費,
- 緩沖批處理:生產者批量投遞,爽!消費者一次性取多個郵件,爽!
三、引入快遞柜帶來的缺點
說了這么多的優點,那么快遞柜有沒有缺點呢?當然有
-
引入復雜度,毫無疑問,快遞柜(訊息佇列)這東西是多出來的,在原來的收取程序中是不存在的,所以需要地方放它,還需要防火、防盜防潮,需要去維護它,訊息佇列中間件也是一樣的,你需要服務器區安裝它,還要對它進行維護,
-
會導致暫時的資料不一致, 如果沒有快遞柜,你收到了郵件件就是真的收到了,但是使用快遞柜之后,你收到了"郵件放入快遞柜的訊息",但是與你真的取到郵件這中間會有一定的延時,當然你最侄訓是會取到郵件,選擇"訊息佇列"快遞柜,就是要忍受暫時不一致,接受"最終一致性",
-
當然極端情況下,快遞柜壞了,你要不可避免地接受"郵件可能會丟失"的事實,對于安保系數高的小區這幾乎不會發生,
歡迎關注我的博客,更多精品知識合集
本文轉載注明出處(必須帶連接,不能只轉文字):字母哥博客 - zimug.com
覺得對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創作動力!,另外,筆者最近一段時間輸出了如下的精品內容,期待您的關注,
- 《kafka修煉之道》
- 《手摸手教你學Spring Boot2.0》
- 《Spring Security-JWT-OAuth2一本通》
- 《實戰前后端分離RBAC權限管理系統》
- 《實戰SpringCloud微服務從青銅到王者》
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465130.html
標籤:Java
下一篇:訊息佇列與快遞柜之間的奇妙關系
