Apache Qpid消息通讯模型和消息地址简介
Broker知识准备
Broker内置两种节点类型:一种是 queue,一种是 topic。
1、 queue 节点能够缓存消息,直到被读取走为止。queue节点满足两个重要的 PTP 通信的特征,存储转发和只接收一次
2、 topic 节点即时进行转发,比如有4个consumer对某消息感兴趣,当消息到达节点时,有3个 consumer正在运行,那么topic节点会将消息转发给这3个consumer,然后就将该消息丢弃。剩下的那个consumer再运行时,则收不到这个消息。
消息地址组成
address_string ::= <address> [ / <subject> ] [ ; <options> ]
options ::= { <key> : <value>, ... }
address:字符串,可理解为节点名字,可自定义,必选。Broker内部用来管理的。
subject:字符串,消息的主题,可选。类似邮件的主题,消息类型的标识。
options:key为字条串,value可以是数字或字符串。消息的选项参数,可选。参数包括浏览模式/消费模式/独占模式/临时队列等等设置。
eg:
CMS/china.news; {mode: browse} //CMS节点上的中国新闻的消息,模式是浏览
CMS/usa.news; {mode: consume} //CMS节点上的美国新闻的消息,模式是消费
CMS/*.news; {mode: browse} //CMS节点上的所有新闻的消息,模式是浏览
通信模型的应用例子
p2p模型
DSS要发消息给CMS,那么DSS第一次登录到broker时,创建一个consumer角色的连接,填上地址DSS,因为是p2p模型,只告诉broker创建DSS服务的专用接收消息节点DSS即可,无需填写消息主题或选项。同样CMS第一次登录broker时,类似填上地址CMS。
当DSS要发送一条消息给CMS,则DSS创建一个producer角色的连接,填上地址CMS并加上消息体。那么这条消息经过broker剥离地址后,消息体会送到CMS。
sub/pub模型
这个模型要用到topic节点。假设有CMS,DSS,VODS三个服务,CMS要发布一个新闻类型的消息,DSS和VODS均订阅了该类消息。订阅者向broker注册订阅消息时,假设topic节点名字叫做CMS_NEWS,则需向broker发送如下订阅地址:
CMS_NEWS/*.news
CMS发布消息到broker时,则发送的消息可加上地址
CMS_NEWS/china.news
CMS_NEWS/japan.news
CMS_NEWS/usa.news
那么这三条消息都会送到DSS和VODS。
再举个例子。假设DSS订阅sports类消息,而VODS订阅money类消息。则DSS订阅地址为
CMS_NEWS/#.sports
VODS订阅地址为
CMS_NEWS/#.money
当CMS发送下面这四条消息:
CMS_NEWS/china.sports 消息体为 XXXX
CMS_NEWS/china.money YYYY
CMS_NEWS/usa.sports WWWW
CMS_NEWS/usa.money ZZZZ
DSS会接收到
XXXX
WWWW
VODS会接收到:
YYYY
ZZZZ