AMQP概念模型


Copyright (2013) 郭龙仓. All Rights Reserved.



写在前面

MOM与Messge Broker

MOM与Message Broker其实是挺宽泛的概念,大部分情况下可以简单认为两者是同义词。

Messge Broker是不同应用之间的消息枢纽,负责实现应用之间的通信。Messge Broker将部分或者全部非核心业务相关的消息处理逻辑从应用中解耦出来,例如消息路由、语言/平台无关性、同步/异步等等。

另外说一句废话,Messge Broker是 Message based,not Stream。


AMQP

AMQP的全称是Advanced Message Queuing Protocol,翻译过来就是高级消息队列协议。简单来说,AMQP是一个厂商中立、语言无关的Message Broker规范。


AMQP规范中有几个核心的概念:


  • Message

  • Virtual Host

  • Exchange

  • Queue

  • Binding

  • Routing Key

  • Binding Key

  • Exchange Type

  • Publisher/Producer

  • Subscriber/Consumer

  • Connection

  • Channel

Virtual Host

每个Message Broker由一个或 Virtual Host构成;可以类比一下理机和虚拟机。Virtual Host相当于一个独立的名称空间,它有属于自己的Exchange、Queue以及的一些相关对象。不同Virtual Host之间的Exchange可以重名。Queue只能和相同Virtual Host中的Exchange进行绑定。


Exchange

每个Virtual Host包含0或多个Exchange。Exchange负责把Message转发到Queue。每个Exchange可以有0或者多个Queue。每个Queue只能监听1个Exchange。

Queue

Queue即消息队列,负责存储Exchange转发过来的Message。注意,是Queue,所以Message是First-In-First-Out。


Binding

Binding指的是Exchange根据规则作出消息转发决策的过程。Message到达Exchange,Exchange此时并不知道Message应该被转发到哪些Queue,然后Exchange根据规则对Message进行Binding决策,Binding完成之后,Exchange根据Binding的结果将Message转发到正确的Queues。


Routing Key

每个Message一般来说必须指定一个Routing Key,Exchange根据Message的Routing Key进行Binding,然后完成Message的转发。


Binding Key

每个Queue一般来说必须指定一个Binding Key。 Binding的过程其实就是根据一定的规则判定Message的Routing Key是否与Queue的Binding Key匹配,如果匹配,则转发Message到Queue。如果Message的Routing Key与多个Queue的Binding Key匹配,则所有匹配的Queue都会收到该Message。


Exchange Type

Exchange Type决定了Binding的匹配规则。AMQP支持三种Exchange Type:


  • Direct Exchange

  • Topic Exchange

  • Fanout Exchange


如果你熟悉网络中单播、组播、广播的概念的话,你可以简单理解为:Direct Exchange就是单播,Topic Exchange就是组播,Fanout Exchange就是广播。


Connection

Publisher/Producer与Virutal Host 或 Subscriber/Consumer与Virtual Host之间的TCP连接。


Channel

通过多路复用技术,多个Channel共享同一个Connection。Message通过Channel在Publisher/Producer、Virutal Host、Subscriber/Consumer之间传递。


一图胜千言

(图中的Message流向箭头画的有点儿曲折,请凑合看。AMQP概念模型_概念模型)

AMQP概念模型_概念模型_02


AMQP协议堆栈


最后附上一张AMQP的协议堆栈图,深入研究请参考官网AMQP规范

AMQP概念模型_AMQP_03

源自:http://blog.csdn.net/anyaas/article/details/17637141?ADUIN=369885910&ADSESSION=1388314375&ADTAG=CLIENT.QQ.5275_.0&ADPUBNO=26274