AMQP与RabbitMQ笔记

一、简介

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

   AMQP是一个应用层的异步消息传递协议,为面向消息的中间件而设计。其目的是通过协议使应用模块之间或应用程序与中间件等进行充分解耦。而在设计初期,AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议。现在已经有相当一部分遵循AMQP的服务器和客户端供使用。其中RabbitMQAMQP的一款开源标准实现。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通信的基本因素。消息由HeaderBody组成。与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(广播)。对于DirectRouting Key必须与BindingKey完全一致时匹配才成功;对于Topic,只要Routing Key符合Binding Key指定的模式,既Binding Key可以为一个匹配模式;而对于FanoutRouting KeyBinding Key不受任何约束。默认情况下交换类型为Direct

China Unix博客中的RabbitMQ专题[5]是个不错的参考资料。


[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

[5] http://blog.chinaunix.net/topic/surpershi/


本文出自 “兴趣点燃未来” 博客,请务必保留此出处http://sztsian.blog.51cto.com/8080523/1356884

AMQP与RabbitMQ笔记

上一篇:【C#小知识】C#中一些易混淆概念总结(四)---------解析Console.WriteLine()


下一篇:Linux学习笔记4.4-Linux重定向