<tbody id="fuft6"><noscript id="fuft6"><video id="fuft6"></video></noscript></tbody>
    <tbody id="fuft6"><noscript id="fuft6"></noscript></tbody>
    <em id="fuft6"><acronym id="fuft6"></acronym></em>
          <button id="fuft6"><acronym id="fuft6"><u id="fuft6"></u></acronym></button>
          首頁技術文章正文

          什么是消息隊列?消息隊列的應用場景

          更新時間:2021-09-28 來源:黑馬程序員 瀏覽量:

          IT培訓班

          消息隊列,英文名:Message Queue,經??s寫為MQ。從字面上來理解,消息隊列是一種用來存儲消息的隊列。來看一下下面的代碼:

          // 1. 創建一個保存字符串的隊列
          Queue<String> stringQueue = new LinkedList<String>();
          // 2. 往消息隊列中放入消息
          stringQueue.offer("hello");
          // 3. 從消息隊列中取出消息并打印
          System.out.println(stringQueue.poll());

          上述代碼,創建了一個隊列,先往隊列中添加了一個消息,然后又從隊列中取出了一個消息。這說明了隊列是可以用來存取消息的。我們可以簡單理解消息隊列就是將需要傳輸的數據存放在隊列中。

          消息隊列中間件是用來存儲消息的軟件(組件)。舉個例子來理解,為了分析網站的用戶行為,我們需要記錄用戶的訪問日志。這些一條條的日志,可以看成是一條條的消息,我們可以將它們保存到消息隊列中。將來有一些應用程序需要處理這些日志,就可以隨時將這些消息取出來處理。

          目前市面上的消息隊列有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。

          消息隊列的應用場景

          1.異步處理
          電商網站中,新的用戶注冊時,需要將用戶的信息保存到數據庫中,同時還需要額外發送注冊的郵件通知、以及短信注冊碼給用戶。但因為發送郵件、發送注冊短信需要連接外部的服務器,需要額外等待一段時間,此時,就可以使用消息隊列來進行異步處理,從而實現快速響應。

          1632821588139_消息隊列0.png

          2.系統解耦

          1632821593973_消息隊列2.png

          如果庫存系統出現問題,會導致訂單系統下載失敗。而且如果庫存系統接口修改了,會導致訂單系統也無法工作。

          使用消息隊列可以實現系統與系統之間的解耦,訂單系統不再調用庫存系統接口,而是把2訂單消息寫入到消息隊列。庫存系統從消息系統中拉取消息,然后再減庫存,從而實現系統解耦。

          3.流量削峰

          1632821599471_消息隊列3.png

          4.日志處理(大數據領域常見)

          大型電商網站(淘寶、京東、國美、蘇寧...)、App(抖音、美團、滴滴等)等需要分析用戶行為,要根據用戶的訪問行為來發現用戶的喜好以及活躍情況,需要在頁面上收集大量的用戶訪問信息。

          1632821605585_消息隊列4.png

          5.生產者、消費者模型

          我們之前學習過Java的服務器開發,Java服務器端開發的交互模型是這樣的:

          1632821612883_消息隊列.png

          我們之前也學習過使用Java JDBC來訪問操作MySQL數據庫,它的交互模型是這樣的:

          1632821620663_消息隊列6.png

          它也是一種請求響應模型,只不過它不再是基于http協議,而是基于MySQL數據庫的通信協議。

          而如果我們基于消息隊列來編程,此時的交互模式成為:生產者、消費者模型。

          1632821627384_消息隊列7.png



          猜你喜歡:

          Spring eureka是什么?有什么作用?

          怎樣能保障Kafka儲存的數據不丟失?

          Cookie是什么?怎樣實現Cookie的讀寫?

          黑馬程序員python大數據開發課程

          在線咨詢 我要報名
          和我們在線交談!

          黄色网站片

          <tbody id="fuft6"><noscript id="fuft6"><video id="fuft6"></video></noscript></tbody>
            <tbody id="fuft6"><noscript id="fuft6"></noscript></tbody>
            <em id="fuft6"><acronym id="fuft6"></acronym></em>
                  <button id="fuft6"><acronym id="fuft6"><u id="fuft6"></u></acronym></button>