一篇文搞明白RabbitMQ原理和開發應用

首先思考幾個問題:

  1. 什麼是消息隊列?消息隊列可以解決什麼問題?
  2. RabbitMQ可以做什麼?
  3. RabbitMQ可以實現消息的過期失效嗎?
  4. RabbitMQ可以實現延遲隊列嗎?
  5. RabbitMQ爲何消息堆積越多,性能越大幅度下降?
  6. RabbitMQ的可靠性體現在哪幾方面?分別是如何實現的?

什麼是消息隊列

提供了以鬆散耦合的靈活方式集成應用程序的一種機制,爲我們提供了基於存儲和轉發的應用程序之間的異步發送,用於異步、解耦、削峯。

  • 生產者:投遞消息的一方
  • 消費者:接收消息的一方
  • 虛擬機:用於權限控制
  • 隊列:消息的存儲容器
  • 交換機:用於將消息路由到一個或多個隊列中
  • 路由鍵:用於規定消息的路由規則,和交換機類型聯合使用實現消息的分發
  • 信道:建立在連接上的虛擬鏈接,每條指令都通過信道來完成(這裏的連接爲TCP連接,多個信道使用同一個TCP連接,多路複用)

AMQP協議

RabbitMQ就是AMQP協議的Erlang實現,我們使用 php-amqplib 擴展和RabbitMQ服務端交互都是靠發送AMQP命令實現的。AMQP協議分爲三層:

  • Module Layer:位於協議的最高層,定義供客戶端調用的命令,比如:聲明交換機(Exchange.Declare)、聲明隊列(Queue.Declare)、發送消息(Basic.Publish)
  • Session Layer:位於中間層,主要負責將客戶端的命令發送給服務器,再將服務端的響應返回給客戶端,主要爲客戶端和服務器之間通信提供可靠的同步機制和錯誤處理
  • Transport Layer:位於最底層,主要傳輸二進制數據

 

三種常用交換機原理和實現

 

RabbitMQ的消息有效期(TTL)和隊列有效期(expires)

 

RabbitMQ死信隊列原理並實現延遲隊列

 

通過存儲機制和隊列結構理解爲什麼RabbitMQ會隨着隊列堆積吞吐量降低

 

RabbitMQ消息隊列的可靠性

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章