1、消息隊列的介紹
消息(Message):是指在應用之間傳送的數據,消息可以非常簡單,比如只包含文本字符串,也可以更復雜,可能包含嵌入對象。
消息隊列(Message Queue):是一種應用間的通信方式,消息發送後可以立即返回,由消息系統來確保信息的可靠專遞,消息發佈者只管把消息發佈到MQ中而不管誰來取,消息使用者只管從MQ中取消息而不管誰發佈的,這樣發佈者和使用者都不用知道對方的存在
2、消息隊列的應用場景
消息隊列在實際應用中包括如下四個場景:
應用耦合:多應用間通過消息隊列對同一消息進行處理,避免調用接口失敗導致整個過程失敗;
異步處理:多應用對消息隊列中同一消息進行處理,應用間併發處理消息,相比串行處理,減少處理時間;
限流削峯:廣泛應用於秒殺或搶購活動中,避免流量過大導致應用系統掛掉的情況;
消息驅動的系統:系統分爲消息隊列、消息生產者、消息消費者,生產者負責產生消息,消費者(可能有多個)負責對消息進行處理;
下面詳細介紹上述四個場景以及消息隊列如何在上述四個場景中使用:
4、消息隊列的兩種模式
消息隊列包括兩種模式,點對點模式(point to point, queue)和發佈/訂閱模式(publish/subscribe,topic)
1、點對點模式
點對點模式下包括三個角色:
消息隊列
發送者 (生產者)
接收者(消費者)
消息發送者生產消息發送到queue中,然後消息接收者從queue中取出並且消費消息。消息被消費以後,queue中不再有存儲,所以消息接收者不可能消費到已經被消費的消息。
點對點模式特點:
- 每個消息只有一個接收者(Consumer)(即一旦被消費,消息就不再在消息隊列中);
- 發送者和接收者間沒有依賴性,發送者發送消息之後,不管有沒有接收者在運行,都不會影響到發送者下次發送消息;
- 接收者在成功接收消息之後需向隊列應答成功,以便消息隊列刪除當前接收的消息;
2、發佈/訂閱模式
發佈/訂閱模式下包括三個角色:
角色主題(Topic)
發佈者(Publisher)
訂閱者(Subscriber)
發佈者將消息發送到Topic,系統將這些消息傳遞給多個訂閱者。
發佈/訂閱模式特點:
- 每個消息可以有多個訂閱者;
- 發佈者和訂閱者之間有時間上的依賴性。針對某個主題(Topic)的訂閱者,它必須創建一個訂閱者之後,才能消費發佈者的消息。
- 爲了消費消息,訂閱者需要提前訂閱該角色主題,並保持在線運行;