# 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 敏捷开发