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
Apache Qpid消息通讯模型和消息地址简介的更多相关文章
- 消息通讯之关于消息队列MQ必须了解的相关概念
目录 系统通讯方式有哪些? 消息队列的应用场景 消息队列通讯模型 常见的消息协议 AMQP MQTT ATOMP JMS 小结 系统通讯方式有哪些? RPC调用 RPC 全称 Remote Proce ...
- 企业级工作流解决方案(七)--微服务Tcp消息传输模型之消息编解码
Tcp消息传输主要参照surging来做的,做了部分裁剪和改动,详细参见:https://github.com/dotnetcore/surging Json-rpc没有定义消息如何传输,因此,Jso ...
- Android应用程序线程消息循环模型分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是 ...
- BOOST 线程完全攻略 - 扩展 - 线程消息通讯
// controlled_module_ex.hpp : controlled_module类的扩展 // 增强线程之间消息通讯 // 增加线程安全启动和安全关闭功能 // 增加定时器功能 #p ...
- Apache RocketMQ 正式开源分布式事务消息
近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...
- 6张图为你分析Kafka Producer 消息缓存模型
摘要:发送消息的时候, 当Broker挂掉了,消息体还能写入到消息缓存中吗? 本文分享自华为云社区<图解Kafka Producer 消息缓存模型>,作者:石臻臻的杂货铺. 在阅读本文之前 ...
- 第十五篇:在SOUI中消息通讯
SOUI是一套基于Win32 SDK的窗口开发的一套DirectUI框架.在SOUI中除了有真窗口使用窗口消息通讯机制外,还有SOUI控件之间的通讯,及控件的事件处理等. 1.真窗口消息通讯 因此可以 ...
- JMS消息类型模型
JMS有两种消息类型模型,一种是P2P(Point To Point), 另一种是Pub/Sub(Publisher/Subscriber),二者之间的主要区别在于消息是否支持重复消费. P2P模型中 ...
- Android 开发笔记 “Android 的消息队列模型”
Android是参考Windows的消息循环机制来实现Android自身的消息循环的. Android通过Looper.Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都 ...
随机推荐
- ppp详解
ppp 一 PPP point to point protocol 数据链路层协议 PPP session establishment 1 link est ...
- shell的case-esac
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- 安卓Toast实现
代码改变世界 Toast实现显示 // 第一个参数:当前的上下文环境.可用getApplicationContext()或this // 第二个参数:要显示的字符串.也可是R.string中字符串ID ...
- iOS学习笔记15-序列化、偏好设置和归档
一.本地持久化 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据.在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案: plist文件( ...
- 【Luogu】P1602Sramoc问题(堆)
题目链接 很巧妙的想法.一开始将1~k-1加入堆中,然后每次从堆里取出一个最小的,判断是不是答案,如果不是,那么就枚举新数的末一位加上. 代码如下 #include<cstdio> #in ...
- K-lord #3 (组合数学)
题目描述 如图,设一个圆分成 n 个扇形 S1 ... ,Sn (扇形大小不一样),现用 k 种不同的颜色对这 n 个扇形进行染色 ( n>=3 , k>=3 ); 每一个扇形染一种颜色, ...
- 【loj6191】「美团 CodeM 复赛」配对游戏
题目 显然期望dp. 简单想法: f[i][j]表示前i个人中向右看并且没有被消除的人数的概率 如果第i+1个人是向右,$f[i+1][j+1]=f[i][j]/2$ 如果第i+1个人是向左,$f[i ...
- HDU [P3949] XOR
线性基求第 k 小异或值 http://www.cnblogs.com/Mr-WolframsMgcBox/p/8567844.html 这道题消元下来是一个上三角矩阵,代码简单,但是不使用与本题的情 ...
- GridView选中,编辑,取消,删除代码
原文发布时间为:2008-08-03 -- 来源于本人的百度文章 [由搬家工具导入] 2.GridView选中,编辑,取消,删除: 效果图: 后台代码:你可以使用sqlhelper,本文没用。代码如下 ...
- hdu 2686 费用流 / 双线程DP
题意:给一个方阵,求从左上角出到右下角(并返回到起点),经过每个点一次不重复,求最大获益(走到某处获得改点数值),下来时每次只能向右或向下,反之向上或向左. 俩种解法: 1 费用流法:思路转化:从左 ...