现在的位置: 首页 > 综合 > 正文

AMQP,RabbitMQ,Qpidd和Kombu

2018年02月14日 ⁄ 综合 ⁄ 共 2223字 ⁄ 字号 评论关闭

一、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可以不配置持久化机制。


   交换器(Exchange)接受来自生产者的消息,并根据不同路由算法将消息发送到消息队列。
   消息队列(Message Queue)在消息没有被消费者消费时将其缓存,当消费者与消息队列连接时,消息队列会把消息转发给消费者。
   消息(Message)是AMQP通信的基本因素。消息由Header和Body组成。与TCP/IP协议类似,Header包含的是各种属性信息,Body是真正传输的数据。
   交换器与消息队列的关联通过Binding实现。交换器与多个消息队列Binding后会形成一张“路由表”,其中存储的信息包括消息队列的限制条件既Binding Key。交换器收到消息时会解析其Header中的Routing Key,根据交换类型(Exchange
Type)将消息路由到消息队列。流程以RabbitMQ官方的简介为例[4]:

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

抱歉!评论已关闭.