AMQP(Advanced Message Queuing Protocol),叫做高级消息队列协议:一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
备注:本篇只介绍AMQP的一些基本概念和设计方式。
一、基本概念
AMQP主要有三部分组成,Exchange、Binding、Queue。
1.Exchange用于接受生产者发布的消息,并根据一定的规则将消息存储到队列Queue里面。
2.Queue用于存储消息,直到消费者将所有的消息消费完为止。
3.Binding定义了Exchange和Queue之间的关联,并提供路由规则。
二、Binding的三种类型(Direct、Fanout 、Topic )
Binding提供了Direct、Fanout 、Topic三种模型来完成Exchange与Queue的交互。
1.Direct
根据消息携带的路由键(routing key)将消息投递给对应队列。直连交换机用来处理消息的单播路由。
消息中的“routing key”如果和Binding中的“binding key”一致, Direct exchange则将message发到对应的queue中,这里的对应关系是1对1。
2.Fanout
将消息路由给绑定到它身上的所有队列,且不理会路由键。扇形交换机用来处理消息的广播路由, 对应关系是1对多。每个发到Fanout类型Exchange的message都会分到所有绑定的queue上去。
3.Topic
通过对消息的路由键和队列到交换机的绑定模式之间的匹配,将消息路由给一个或多个队列。主题交换机用来实现消息的多播路由。根据routing key,及通配规则,Topic exchange将分发到目标queue中。关系是多对多。
三、AMQP所支持的体系结构
存储转发(多个消息发送者,单个消息接收者)。
分布式事务(多个消息发送者,多个消息接收者)。
发布订阅(多个消息发送者,多个消息接收者)。
基于内容的路由(多个消息发送者,多个消息接收者)。
文件传输队列(多个消息发送者,多个消息接收者)。
点对点连接(单个消息发送者,单个消息接收者)。
参考资料:
百度百科:AMQP
RabbitMQ与AMQP协议
RabbitMQ与AMQP协议详解