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

AMQP概念模型

2013年02月04日 ⁄ 综合 ⁄ 共 1773字 ⁄ 字号 评论关闭
文章目录

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的协议堆栈图,深入研究请参考官网AMQP规范

抱歉!评论已关闭.