阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

AMQP与RabbitMQ笔记

143次阅读
没有评论

共计 1900 个字符,预计需要花费 5 分钟才能阅读完成。

一、简介

AMQP 全称是 Advanced MessageQueuing Protocol (高级消息队列协议)。其官方网站在[1]。

AMQP 是一个应用层的异步消息传递协议,为面向消息的中间件而设计。其目的是通过协议使应用模块之间或应用程序与中间件等进行充分解耦。而在设计初期,AMQP 的原始用途只是为金融界提供一个可以彼此协作的消息协议。现在已经有相当一部分遵循 AMQP 的服务器和客户端供使用。其中 RabbitMQ 是 AMQP 的一款开源标准实现。RabbitMQ 的官方网站参见[2].

AMQP 现在已经成为 OASIS 的标准之一。

二、概念及技术

1. 协议

AMQP 的设计理念与数据通信网络中的路由协议有些相似。从应用程序角度,AMQP 的应用也是服务器 / 客户端模式。但是在消息队列中,AMQP 通过队列的状态决定生产者 (Producer)、消费者(Consumer) 之间的连接。

AMQP 协议分为三层:ModelLayer,规范服务器和 Broker 行为;Session Layer 定义客户端与服务器端 Broker 的上下文;Transport Layer 传输二进制数据流。

2.Broker 模型

AMQP 的服务器 (Broker) 主要由交换器、消息、队列组成(有些文献归类为两项:交换器与消息队列)。Broker 的主要功能是消息的路由和缓存。在 RabbitMQ 中,交换器分为持久交换器、临时交换器、自动删除交换器。对于需要保障可靠性的消息,RabbitMQ 可以将消息、队列和交换器的数据写入本地硬盘。而对于响应时间敏感的消息,RabbitMQ 可以不配置持久化机制。

交换器 (Exchange) 接受来自生产者的消息,并根据不同路由算法将消息发送到消息队列。

消息队列 (Message Queue) 在消息没有被消费者消费时将其缓存,当消费者与消息队列连接时,消息队列会把消息转发给消费者。

消息 (Message) 是 AMQP 通信的基本因素。消息由 Header 和 Body 组成。与 TCP/IP 协议类似,Header 包含的是各种属性信息,Body 是真正传输的数据。

交换器与消息队列的关联通过 Binding 实现。交换器与多个消息队列 Binding 后会形成一张“路由表”,其中存储的信息包括消息队列的限制条件既 Binding Key。交换器收到消息时会解析其 Header 中的 Routing Key,根据交换类型 (Exchange Type) 将消息路由到消息队列。流程以 RabbitMQ 官方的简介为例[4]:

AMQP 与 RabbitMQ 笔记

BindingKey 由消费者在 Binding 交换器与消息队列时指定。Routing Key 在生产者发送消息时指定。两者的匹配方式由交换类型决定。

交换类型 (Exchange Type) 分为 Direct(单播,又译为直连式),Topic(组播,又译为主题式),Fanout(广播)。对于 Direct,Routing Key 必须与 BindingKey 完全一致时匹配才成功;对于 Topic,只要 Routing Key 符合 Binding Key 指定的模式,既 Binding Key 可以为一个匹配模式;而对于 Fanout,Routing Key 和 Binding Key 不受任何约束。默认情况下交换类型为 Direct。

[1] http://www.amqp.org/

[2] http://www.rabbitmq.com/

[3] http://www.amqp.org/product/architecture

[4] http://www.rabbitmq.com/tutorials/amqp-concepts.html

RabbitMQ 的详细介绍:请点这里
RabbitMQ 的下载地址:请点这里

推荐阅读:

CentOS 5.6 安装 RabbitMQ http://www.linuxidc.com/Linux/2013-02/79508.htm

RabbitMQ 客户端 C ++ 安装详细记录 http://www.linuxidc.com/Linux/2012-02/53521.htm

用 Python 尝试 RabbitMQ http://www.linuxidc.com/Linux/2011-12/50653.htm

RabbitMQ 集群环境生产实例部署 http://www.linuxidc.com/Linux/2012-10/72720.htm

Ubuntu 下 PHP + RabbitMQ 使用 http://www.linuxidc.com/Linux/2010-07/27309.htm

在 CentOS 上安装 RabbitMQ 流程 http://www.linuxidc.com/Linux/2011-12/49610.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计1900字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中