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消息通讯模型和消息地址简介的更多相关文章

  1. 消息通讯之关于消息队列MQ必须了解的相关概念

    目录 系统通讯方式有哪些? 消息队列的应用场景 消息队列通讯模型 常见的消息协议 AMQP MQTT ATOMP JMS 小结 系统通讯方式有哪些? RPC调用 RPC 全称 Remote Proce ...

  2. 企业级工作流解决方案(七)--微服务Tcp消息传输模型之消息编解码

    Tcp消息传输主要参照surging来做的,做了部分裁剪和改动,详细参见:https://github.com/dotnetcore/surging Json-rpc没有定义消息如何传输,因此,Jso ...

  3. Android应用程序线程消息循环模型分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6905587 我们知道,Android应用程序是 ...

  4. BOOST 线程完全攻略 - 扩展 - 线程消息通讯

      // controlled_module_ex.hpp : controlled_module类的扩展 // 增强线程之间消息通讯 // 增加线程安全启动和安全关闭功能 // 增加定时器功能 #p ...

  5. Apache RocketMQ 正式开源分布式事务消息

    近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...

  6. 6张图为你分析Kafka Producer 消息缓存模型

    摘要:发送消息的时候, 当Broker挂掉了,消息体还能写入到消息缓存中吗? 本文分享自华为云社区<图解Kafka Producer 消息缓存模型>,作者:石臻臻的杂货铺. 在阅读本文之前 ...

  7. 第十五篇:在SOUI中消息通讯

    SOUI是一套基于Win32 SDK的窗口开发的一套DirectUI框架.在SOUI中除了有真窗口使用窗口消息通讯机制外,还有SOUI控件之间的通讯,及控件的事件处理等. 1.真窗口消息通讯 因此可以 ...

  8. JMS消息类型模型

    JMS有两种消息类型模型,一种是P2P(Point To Point), 另一种是Pub/Sub(Publisher/Subscriber),二者之间的主要区别在于消息是否支持重复消费. P2P模型中 ...

  9. Android 开发笔记 “Android 的消息队列模型”

    Android是参考Windows的消息循环机制来实现Android自身的消息循环的. Android通过Looper.Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都 ...

随机推荐

  1. Leetcode 376.摆动序列

    摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...

  2. Codeforces Round #417 (Div. 2) 花式被虐

    A. Sagheer and Crossroads time limit per test 1 second memory limit per test 256 megabytes input sta ...

  3. 最近项目中公用的JS

    var closeid = 1; var isneedpwd = 0; var editor1; var NoCheckUrl = 0;//适用于框架 不验证权限 !=0验证 function Erp ...

  4. iOS第三方-百度地图地图SDK(一)

    前言 最近项目忙完了准备把百度地图的方法都熟悉一遍,基于百度地图2.10.0,写demo的同时也写下博客来记录下 模拟器设置 我直接就复制我以前写过的一篇的图了,懒得截图... 获取百度地图KEY 让 ...

  5. PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

  6. SPOJ CIRU The area of the union of circles ——Simpson积分

    [题目分析] 圆的面积并. 直接Simpson积分,(但是有计算几何的解法,留着flag). simpson积分,如果圆出现了不连续的情况,是很容易出事情的.(脑补一下) 但是没有什么办法,本来就是一 ...

  7. NOJ 1116 哈罗哈的大披萨 【淡蓝】 [状压dp+各种优化]

    我只能说,珍爱生命,远离卡常数的题...感谢陈老师和蔡神,没有他们,,,我调一个星期都弄不出来,,,, 哈罗哈的大披萨 [淡蓝] 时间限制(普通/Java) : 1000 MS/ 3000 MS   ...

  8. Day 12 shell语法及程序若干

    1. 现归纳一下shell中的运算符:       +:对两个变量做加法.    -:对两个变量做减法.    *:对两个变量做乘法.    /:对两个变量做除法.    **:对两个变量做幂运算.  ...

  9. Golang 入门 : 等待 goroutine 完成任务

    Goroutine 是 Golang 中非常有用的功能,但是在使用中我们经常碰到下面的场景:如果希望等待当前的 goroutine 执行完成,然后再接着往下执行,该怎么办?本文尝试介绍这类问题的解决方 ...

  10. 2017-10-23学大伟业Day1

    T1 叉叉 题目名称 叉叉 程序文件名 cross 输入文件名 cross.in 输出文件名 cross.out 每个测试点时限 1秒 内存限制 128MB 测试点数目 10 每个测试点分值 10 是 ...