# 5.2 消息隊列
## 5.2 消息隊列
消息隊列(Message queue)是一種*進程間通信(Inter-process communication,IPC)*機制。一個簡單的消息隊列的例子是:一個進程往隊列里投遞消息,另一個進程從隊列里取出消息并執行相應的操作。
消息隊列可以使Web網站在后臺異步完成一些比較花時間的任務——Web服務器處理一個HTTP請求的時間是有限制的,一般在幾十秒內沒有回應就會被客戶端當作超時錯誤。所以如果一個HTTP請求會觸發一個長時間運行的任務,可以把它投遞到消息隊列,由后臺的另一個進程來執行,處理HTTP請求的進程不必等待任務結束就可以立即返回應答(如果客戶端需要知道任務的結果,可以稍后再查詢)。
我們可以自己實現一個簡單的消息隊列,如前面[Cron](../web_site/cron.md)提到的,用Cron加上數據庫就可以做到;也可以采用專門的消息隊列服務器(軟件),如[RabbitMQ](https://www.rabbitmq.com/)等。
需要說明的是,RabbitMQ等一些隊列服務器采用了**AMQP**,即**高級消息隊列協議(Advanced Message Queuing Protocol)**;對用戶來說,這意味著可以使用相同的客戶端與不同的隊列服務器對話,只要它們都使用AMQP。有關AMQP以及更多支持此協議的隊列服務器,請參考:[https://en.wikipedia.org/wiki/Advanced\_Message\_Queuing\_Protocol](https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol)
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超鏈接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客戶端請求
- 1.5.2 服務器應答
- 1.5.3 進一步了解HTTP
- 1.6 HTTPS
- 2 Web瀏覽器
- 2.1 HTML
- 2.1.1 文檔類型聲明
- 2.1.2 標簽和屬性
- 2.1.3 文檔結構
- 2.1.4 DOM
- 2.1.5 進一步了解HTML
- 2.2 CSS
- 2.2.1 樣式與樣式表
- 2.2.2 樣式表語法
- 2.2.3 級聯樣式表
- 2.2.4 進一步了解CSS
- 2.3 JavaScript
- 2.3.1 script標簽
- 2.3.2 操縱DOM
- 2.3.3 jQuery
- 2.3.4 進一步了解JavaScript
- 2.4 Ajax
- 2.5 移動設備與響應式Web設計
- 3 Web服務器
- 3.1 方法與資源
- 3.2 狀態代碼
- 3.3 靜態內容與動態內容
- 3.4 編程語言與技術
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服務器架構
- 3.7 Web緩存
- 3.8 服務器推送
- 4 數據庫
- 4.1 關系型數據庫
- 4.2 NoSQL數據庫
- 5 Web服務器的其他組件
- 5.1 Cron
- 5.2 消息隊列
- 5.3 郵件服務器
- 6 開發工具與技術
- 6.1 Git
- 6.1.1 Git基礎操作
- 6.1.2 Git基本原理
- 6.1.3 進一步了解Git
- 6.2 敏捷開發