RabbitMQ 是目前使用上最廣泛的 Message Queue,但是在了解 RabbitMQ 之前,必須先了解 Message Queue 的概念和特性,才會比較好上手。
因此此系列文會先從 Message Queue 開始介紹,接著介紹 RabbitMQ 的用法、如何在電腦上安裝 RabbitMQ、以及如何在 Spring Boot 中實作 RabbitMQ。
如果你對 RabbitMQ 的其他文章有興趣,也可以直接點擊下列連結跳轉到該文章:
而在這篇文章中,我們就會先來介紹什麼是 Message Queue,所以我們就開始吧!
Message Queue 是一種系統設計的技術,大陸是翻譯成「消息隊列」,台灣這邊好像沒有準確的譯名,所以通常大家還是直接用 Message Queue 來稱呼。
而 Message Queue 的用途,就是「信箱」的概念,因此 Message Queue 就擁有了「非同步處理」以及「功能解耦」的兩大優點。
上面的描述看起來可能有點抽象,所以我們可以直接透過一個例子,來了解 Message Queue 的概念。
舉例來說,假設你家沒有郵箱的話,那麼今天郵差如果想要送信給你,郵差就只能夠來你家按門鈴時,然後你就得從沙發上爬起來、走到樓下開門、並且當著郵差的面簽收這封信,這樣子你才能夠拿到這封信。
所以在沒有信箱的時代,你和郵差「必須同一時間」出現在家裡大門口,這樣子郵差才能把信件親手交給你。
但是,如果我們使用了「信箱」的話,狀況就不一樣了!
如果你家有安裝信箱的話,那麼郵差想要送信給你時,就只要直接把信投遞到你家的信箱裡面,然後郵差就可以繼續去處理其他事情了,完全不用等你下樓來開門!而你也可以等到之後有空時,再自己下來收這封信。
因此在有了信箱之後,你和郵差就「不需要同一時間」出現在家裡大門口,而是郵差先把信件投遞到信箱中,並且將這封信暫存在信箱裡,等到你之後有空時再來收信。
因此「信箱」的概念,就是 Message Queue 的用途,也就是能夠 「暫存消息的傳遞」,進而達到兩個服務之間的非同步處理!
透過上面的例子,先大概了解「Message Queue = 信箱」這個概念之後,接著我們也可以用更具體的真實情境,來介紹 Message Queue 的用途。
舉例來說,假設現在在電商網站中有兩個微服務:訂單系統、數據分析系統,那麼當使用者下了一筆訂單之後,這時候訂單系統就必須 call 數據分析的 api,將使用者購買了哪些商品傳給數據分析系統,讓他背後去進行大數據分析。
所以在沒有使用 Message Queue 之前,微服務的架構會像是下面這樣子:
這個架構也沒有說不好,但是想像一下,假設今天數據分析系統出現問題,導致 call api 請求超時、或是直接出現 500 錯誤,那這樣子就會導致使用者沒辦法成功下訂單:
但是對於使用者而言,他根本不想要使用數據分析系統!他只是想要下訂單而已,但是卻會因為數據分析系統出現問題,導致使用者被連累著也出現問題。
所以這個時候,就可以透過引入「Message Queue」這項技術,來解決這個問題!
假設我們在「訂單系統」和「數據分析系統」之間,添加了一組 Message Queue 的話,那麼步驟就會變成下面這樣:
所以當我們使用了 Message Queue 之後,在使用者下訂單的過程中,完全不會受到數據分析系統的干擾,而是可以專心的執行下訂單的操作了。
而數據分析系統也可以在自己有空時,主動到 Message Queue 中查看是否有尚未處理的訂單數據,如果有的話,就抓取這一筆訂單數據來處理。並且他也可以慢慢的去分析這筆訂單數據,不用為了要搶快、要盡快回覆使用者,而逼迫自己要分析的非常迅速。
所以透過 Message Queue 的設計,我們就可以將「訂單系統」和「數據分析系統」的功能給拆分開來,讓他們不需要同一時間處理完所有步驟,而是可以分批步驟慢慢執行,進而達到「非同步處理」以及「功能解耦」的效果了!
所以最終的架構圖就會如下圖所示:
了解了 Message Queue 的具體使用情境之後,接著我們也可以來探討一下使用 Message Queue 的優缺點。
使用 Message Queue 有四大優點:
其中關於「非同步處理」和「功能解耦」的部分,在上面的例子中已經有介紹到這一塊了。
而至於「易於橫向擴展」和「流量速率限制」這部分,因為比較複雜,大家有興趣的話,可以再參考 ByteByteGo 的相關介紹。
而至於使用 Message Queue 的缺點,則有:
也因為 Message Queue 在使用上不是萬能的,所以大家在引入 Message Queue 進來之前,一定要仔細思考:「這項技術是否適用於目前的架構?他是否真的能解決目前你遇到的問題?你是否願意多維護一份功能?」,只有當 Message Queue 真的能解決你的問題時,才有引入他的意義。
而這也是大家想要邁向資深工程師的必經過程,即是有能力評估某一個功能的優缺點,並且決定是否要採用此項技術。
不過老實說 Message Queue 是真的滿好用的啦🤣,而且也真的很常見,所以多了解一點是絕對不會虧的!
這篇文章我們先介紹了 Message Queue 是什麼、並且也比較了 Message Queue 的優缺點,希望能讓大家對 Message Queue 的用途有更多的了解。
如果你對 RabbitMQ 的其他文章有興趣,也可以直接點擊下列連結跳轉到該文章:
如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!