5.2 消息队列
消息队列(Message queue)是一种进程间通信(Inter-process communication,IPC)机制。一个简单的消息队列的例子是:一个进程往队列里投递消息,另一个进程从队列里取出消息并执行相应的操作。
消息队列可以使Web网站在后台异步完成一些比较花时间的任务——Web服务器处理一个HTTP请求的时间是有限制的,一般在几十秒内没有回应就会被客户端当作超时错误。所以如果一个HTTP请求会触发一个长时间运行的任务,可以把它投递到消息队列,由后台的另一个进程来执行,处理HTTP请求的进程不必等待任务结束就可以立即返回应答(如果客户端需要知道任务的结果,可以稍后再查询)。
我们可以自己实现一个简单的消息队列,如前面Cron提到的,用Cron加上数据库就可以做到;也可以采用专门的消息队列服务器(软件),如RabbitMQ等。
需要说明的是,RabbitMQ等一些队列服务器采用了AMQP,即高级消息队列协议(Advanced Message Queuing Protocol);对用户来说,这意味着可以使用相同的客户端与不同的队列服务器对话,只要它们都使用AMQP。有关AMQP以及更多支持此协议的队列服务器,请参考:https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol