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
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之间传递。
一图胜千言
AMQP协议堆栈
最后附上一张AMQP的协议堆栈图,深入研究请参考官网AMQP规范。
源自:http://blog.csdn.net/anyaas/article/details/17637141?ADUIN=369885910&ADSESSION=1388314375&ADTAG=CLIENT.QQ.5275_.0&ADPUBNO=26274