一、AMQP简介
AMQP全称是Advanced MessageQueuing Protocol (高级消息队列协议)。其官方网站在[1]。
AMQP是一个应用层的异步消息传递协议,为面向消息的中间件而设计。其目的是通过协议使应用模块之间或应用程序与中间件等进行充分解耦。而在设计初期,AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议。现在已经有相当一部分遵循AMQP的服务器和客户端供使用。其中RabbitMQ是AMQP的一款开源标准实现。RabbitMQ的官方网站参见[2].
AMQP现在已经成为OASIS的标准之一。
二、AMQP概念及技术
1.协议
AMQP的设计理念与数据通信网络中的路由协议有些相似。从应用程序角度,AMQP的应用也是服务器/客户端模式。但是在消息队列中,AMQP通过队列的状态决定生产者(Producer)、消费者(Consumer)之间的连接。
AMQP协议分为三层:ModelLayer,规范服务器和Broker行为;Session Layer定义客户端与服务器端Broker的上下文;Transport Layer传输二进制数据流。
2.Broker模型
AMQP的服务器(Broker)主要由交换器、消息、队列组成(有些文献归类为两项:交换器与消息队列)。Broker的主要功能是消息的路由和缓存。在RabbitMQ中,交换器分为持久交换器、临时交换器、自动删除交换器。对于需要保障可靠性的消息,RabbitMQ可以将消息、队列和交换器的数据写入本地硬盘。而对于响应时间敏感的消息,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。
China Unix博客中的RabbitMQ专题[5]是个不错的参考资料。
三. Qpid相关概念
qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信。Qpid 提供了 C++/Python/Java/C# 等主流编程语言的客户端库,安装使用非常方便。相对于其他的 AMQP 实现,Qpid 社区十分活跃,有望成为标准 AMQP 中间件产品。除了符合 AMQP 基本要求之外,Qpid 提供了很多额外的 HA 特性,非常适于集群环境下的消息通信。
四.Kombu相关概念
摘自kombu官网: 这里
Kombu is a messaging library for Python.
The aim of Kombu is to make messaging in Python as easy as possible by providing an idiomatic high-level interface for the AMQ protocol, and also provide proven and tested solutions to common messaging problems.
AMQP is the Advanced Message Queuing Protocol, an open standard protocol for message orientation, queuing, routing, reliability and security, for which the RabbitMQmessaging server is the most popular implementation.
个人觉得,kombu就是基于AMQP实现的一个Python的消息队列。
[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