1. 程式人生 > 其它 >訊息佇列面試題1-訊息佇列是什麼?原理?使用場景或解決的問題?

訊息佇列面試題1-訊息佇列是什麼?原理?使用場景或解決的問題?

一、訊息佇列是什麼?

訊息佇列(Message Queue),是分散式系統中重要的元件,其通用的使用場景可以簡單地描述為:當不需要立即獲得結果,但是併發量又需要進行控制的時候,差不多就是需要使用訊息佇列的時候。

舉個例子:去飯店吃飯的時候,每個人都拿著自己的號等待叫號取餐。

張三(生產者)把訂餐的訊息傳送到櫃檯(訊息佇列),又從其中取了餐即消費了訊息,可以說這就是訊息佇列的一個完整走向——訊息被髮送到佇列中,又成功被消費者消費。

二、訊息佇列的兩種模式(原理)

1、點對點模式

原理:訊息傳送者生產訊息傳送到queue中,然後訊息接收者從queue中取出並且消費訊息。訊息被消費以後,queue中不再有儲存,所以訊息接收者不可能消費到已經被消費的訊息。

點對點模式特點:

  • 每個訊息只有一個接收者(Consumer)(即一旦被消費,訊息就不再在訊息佇列中);
  • 傳送者和接收者間沒有依賴性,傳送者傳送訊息之後,不管有沒有接收者在執行,都不會影響到傳送者下次傳送訊息;
  • 接收者在成功接收訊息之後需向佇列應答成功,以便訊息佇列刪除當前接收的訊息;

2、釋出/訂閱模式

原理:釋出者將訊息傳送到Topic,系統將這些訊息傳遞給多個訂閱者。

釋出/訂閱模式特點:

  • 每個訊息可以有多個訂閱者;
  • 釋出者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須建立一個訂閱者之後,才能消費釋出者的訊息。
  • 為了消費訊息,訂閱者需要提前訂閱該角色主題,並保持線上執行;

三、使用場景或解決的問題?

訊息佇列在實際應用中包括如下四個場景:

  • 應用耦合:多應用間通過訊息佇列對同一訊息進行處理,避免呼叫介面失敗導致整個過程失敗;
  • 非同步處理:多應用對訊息佇列中同一訊息進行處理,應用間併發處理訊息,相比序列處理,減少處理時間;
  • 限流削峰:廣泛應用於秒殺或搶購活動中,避免流量過大導致應用系統掛掉的情況;
  • 訊息驅動的系統:系統分為訊息佇列、訊息生產者、訊息消費者,生產者負責產生訊息,消費者(可能有多個)負責對訊息進行處理;

四、常用的訊息佇列

ActiveMQ、RocketMQ、RabbitMQ、Kafka等