消息隊列的經常使用場景介紹

在百度百科中,消息隊列是這麼解釋的:「消息隊列」是在消息的傳輸過程當中保存消息的容器。redis

這個解釋中的「消息」指的是在兩臺計算機間傳送的數據單位。消息能夠很是簡單,例如只包含文本字符串;也能夠更復雜,可能包含嵌入對象。消息被髮送到隊列中。數據庫

「消息隊列」是在消息的傳輸過程當中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;若是發送消息時接收者不可用,消息隊列會保留消息,直到能夠成功地傳遞它。異步

 

日常在工做中,咱們也經常使用消息隊列,好比kafka、rabbitmq等,大多數公司基本上都有在用,固然也有使用redis來模擬消息隊列的,固然那是不建議的方式。spa

 

下面根據我日常使用的場景以及網上的資料大致說下消息隊列的經常使用場景。orm

消息隊列的主要特色是異步處理,主要目的是減小請求響應時間和解耦。對象

主要的使用場景就是將比較耗時並且不須要當即生效返回結果的操做,咱們把這種操做做爲一個消息,放到消息隊列中。處理方能夠在任什麼時候候去獲取並處理這條消息。這裏咱們只要保證消息的格式不變,消息的發送方和接收處理方都認識這個消息,那麼雙方就不須要彼此通訊,便可以完成一件事。blog

 

固然,若是咱們使用消息隊列的話,也有許多須要注意的點。好比,消息的發送方不須要接收方當即返回處理結果,不然的話只能等待處理結果;好比系統會有短暫的不一致性,發送方不可預知接收方什麼時間處理完這個消息。固然,實際生產中仍是有須要地方容許這些好比的,因此消息隊列如今是異常的火爆。rabbitmq

 

下面舉一個網上的例子(自我感受,很是的生動形象):隊列

假設用戶在軟件中註冊,服務端收到用戶的註冊請求後,它會作這些操做:路由

校驗用戶名等信息,若是沒問題會在數據庫中添加一個用戶記錄若是是用郵箱註冊會給你發送一封註冊成功的郵件,手機註冊則會發送一條短信分析用戶的我的信息,以便未來向他推薦一些志同道合的人,或向那些人推薦他發送給用戶一個包含操做指南的系統通知等等……

 

可是對於用戶來講,註冊功能實際只須要第一步,只要服務端將他的帳戶信息存到數據庫中他即可以登陸上去作他想作的事情了。至於其餘的事情,服務端就能夠把其餘的操做放入對應的消息隊列中而後立刻返回用戶結果,由消息隊列異步的進行這些操做。

相關文章
相關標籤/搜索