1. 概述
上文中我们介绍了一种流行的 Broker 分布式架构:分布式架构 Broker 简介 rabbitmq 就是在 broker 架构的基础上实现的,在这个架构基础上,rabbitmq 实现了 AMQP 消息队列协议。 与 broker 架构的简单清晰不同,AMQP 对消息队列应用层的消息、连接、传输等进行了抽象,定义了各种消息队列的功能与消息传输模式,也因此显得有些复杂。 各种语言都实现了 AMQP 协议相关的各种操作方法,因此,基于 AMQP 设计的 rabbitmq 也就实现了平台、语言无关的消息队列通信。
2. AMQP 的功能
AMQP 实现了各种消息交换体系:
- 存储转发(多个消息发送者,单个消息接收者)
- 分布式事务(多个消息发送者,多个消息接收者)
- 发布订阅(多个消息发送者,多个消息接收者)
- 基于内容的路由(多个消息发送者,多个消息接收者)
- 文件传输队列(多个消息发送者,多个消息接收者)
- 点对点连接(单个消息发送者,单个消息接收者)
3. AMQP 的三层抽象
与 OSI 网络分层非常类似,AMQP 将整个通信模型分为三层:
3.1. 模型层
模型层的主要职责是为客户端提供实现各种业务功能的指令集。 包括对 connection、channel、exchange、envelope、routing、buffering、message queue 的抽象指令。 让用户可以在各种平台、语言环境下无差别的操作整个队列服务。
3.2. 会话层
会话层提供可靠的传输过程,将消息、应答、指令在服务器与客户端应用之间传输。 负责会话的同步机制和错误处理。
3.3. 传输层
负责消息的传输,快速打包解包需要传输的二进制编码,维护多个会话的连接。 AMQP 的实现者可以使用任何传输协议实现传输层。
4. AMQP 模型
作为一个消息队列,他的主要功能是消息的路由和缓存。 AMQP 提供了类似功能的模型:
5. PHP 操作 AMQP
RabbiMQ Clients & Developer Tools -- http://www.rabbitmq.com/devtools.html
这里介绍一下 PHP 操作 AMQP 的相关扩展和库,PHP 操作 AMQP 有两种方式可供选择:
5.1. 官方扩展 amqp
执行下列 shell 命令:
代码语言:javascript复制wget http://pecl.php.net/get/amqp-1.0.0.tgz
tar zxvf amqp-1.0.0.tgz
cd amqp-1.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp
make && make install
在 php.ini 中添加 extension=amqp.so,重启服务器即可完成扩展的安装。 它的使用可以参看:
PHP MANUAL AMQP -- http://php.net/manual/pl/book.amqp.php
5.2. php-amqplib
php-amqplib 是一个基于上述的官方扩展的开源项目,提供了更加方便的面向对象操作和错误处理,他是 Rabbitmq 官方推荐使用的操作方式。 使用他之前,需要先如上述安装官方的 amqp 扩展,然后可以通过 githup 上拉取最新的源码进行安装:
php-amqplib/php-amqplib -- https://github.com/php-amqplib/php-amqplib
除此之外,推荐使用 composer 进行依赖和安装,在 composer.json 中加入:
代码语言:javascript复制{
"require": {
"php-amqplib/php-amqplib": "2.6.*"
}
}
执行 composer.phar install 即可完成安装。 使用时需要增加引用代码:
代码语言:javascript复制<?php
require_once __DIR__.'/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;
?>
具体使用方法可以参看 rabbitmq 官方文档或 php-amqplib 源码中的 example 目录下的源码。
6. 参考资料
amqp — https://www.amqp.org/ rabbitmq tutorials — https://www.rabbitmq.com/tutorials/amqp-concepts.html。 AMQP 协议 — http://langyu.iteye.com/blog/759663/ php manual amqp — http://php.net/manual/pl/book.amqp.php。 给PHP安装amqp扩展 — http://blog.csdn.net/clh604/article/details/16343605。 php-amqplib — https://github.com/php-amqplib/php-amqplib。