AMQP 消息服务应用协议

2022-06-27 13:18:56 浏览数 (1)

1. 概述

上文中我们介绍了一种流行的 Broker 分布式架构:分布式架构 Broker 简介 rabbitmq 就是在 broker 架构的基础上实现的,在这个架构基础上,rabbitmq 实现了 AMQP 消息队列协议。 与 broker 架构的简单清晰不同,AMQP 对消息队列应用层的消息、连接、传输等进行了抽象,定义了各种消息队列的功能与消息传输模式,也因此显得有些复杂。 各种语言都实现了 AMQP 协议相关的各种操作方法,因此,基于 AMQP 设计的 rabbitmq 也就实现了平台、语言无关的消息队列通信。

2. AMQP 的功能

AMQP 实现了各种消息交换体系:

  1. 存储转发(多个消息发送者,单个消息接收者)
  2. 分布式事务(多个消息发送者,多个消息接收者)
  3. 发布订阅(多个消息发送者,多个消息接收者)
  4. 基于内容的路由(多个消息发送者,多个消息接收者)
  5. 文件传输队列(多个消息发送者,多个消息接收者)
  6. 点对点连接(单个消息发送者,单个消息接收者)

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。

0 人点赞