简介

AMQP即Advanced Message Queuing Protocol,高级消息队列协议,是面向消息中间件设计的应用层协议的一个开放标准。 它的主要特点是面向消息、队列、路由(包括点对点和发布/订阅)]、可靠性和安全。

AMQP允许来自不同供应商的消息生产者和消费者实现真正的互操作扩展,就如同SMTP、HTTP、FTP等协议采用的方式一样。而此前对于消息中间件的标准化努力则集中在API层面上(比如JMS),且没有提供互操作性的途径。不同于JMS的仅仅定义API,AMQP是一个线路级的协议——它描述了通过网络传输的字节流的数据格式。因此,遵从这个协议的任何语言编写的工具均可以操作AMQP消息。

AMQP模型

AMQP

Producer

Producer即生产者,是一个向Exchange发布消息的客户端应用程序。

Producer创建Message,并将Message发布到Broker Server。 Message由两部分组成:Payload和Label。Payload是被传输的数据,Label(包含Exchange name, Topic tag等等)是对Payload的描述,用来路由消息。

Consumer

Consumer即消费者,一个从Message Queue中请求消息的客户端应用程序

Consumer连接到Broker Server上,并订阅Broker Server上的Queue。Consumer接收到的Message只包含Payload,也就是说消息路由完成之后,消息中不再包含Label。

Channel

Channel即通道,多路复用连接中的一条独立的双向数据流通道,为会话提供物理传输介质,在客户端的每个连接里,可建立多个通道。

例如,Consumer要连接到Broker Server上,就需要创建一个TCP连接,当这个TCP连接打开后,Consumer会创建一个通道,通道是TCP连接中的虚拟连接。 一个TCP连接中可以创建多个通道。

Queue

Queue即消息队列,是消息的容器,用来保存消息直到被Consumer接收,每个消息都会被投入到一个或多个队列中。

Exchange和Binding

Exchange即交换器,用来接收Producer发布的消息,并通过设定的路由规则将消息路由给服务器中的Queue。

Binding即绑定器,可以理解为路由规则。它的作用就是把Exchange和Queue按照路由规则绑定起来。

Binding Key即绑定关键字,Exchange视自身类型来决定Binding的路由行为。

Routing Key即消息的路由关键字,Exchange根据这个关键字决定如何路由某条消息。

Exchange共有四种类型:

  • Direct: 将消息中的Routing Key与该Exchange关联的所有Binding中的Binding Key进行比较,如果相等,则将消息发送到该Binding对应的Queue中。
  • Fanout: 这是一种广播行为,将消息发送给所有与该Exchange定义过Binding的所有Queue中。
  • Topic: 将Routing Key与Binding Key进行匹配,Routing Key和Binding Key由多个单词组成,这些单词使用.分隔,使用*#进行模糊匹配,*匹配一个单词,#匹配0个或多个单词。如果匹配成功,将消息发送到对应的Queue中。如sys.errorbiz.error都和*.error匹配。
  • Headers: 不依赖于Routing Key与Binding Key的匹配规则来路由消息,而是根据消息内容中的headers属性进行匹配。在绑定Exchange和Queue时指定一组键值对,当消息发送到Exchange时,会取得消息的headers,也是键值对的形式,将两组键值对进行匹配,如果完全匹配,则将消息发送到对应的Queue中。

Broker

Broker是消息队列服务器实体,交换器Exchange和消息队列Queue都位于服务器端,即为Broker。

Vhost

Vhost即virtual host虚拟主机,指一批相关的Exchange、Queue和Binding。 虚拟主机是共享相同的身份认证和加密环境的独立服务器域。 一个Broker里可以开设多个vhost,用作不同用户的权限分离