精华内容
下载资源
问答
  • MQTT协议在topic设计想法 集群方式使用EMQTT方案:http://emqtt.com/docs/v2/cluster.html 假设有异地多中心 假设EMQTTnode节点之前有数据分发 问题: 按照上面文档说明路由表方案话,在每个节点...

    MQTT协议在topic设计上的想法

    633187-20171223162357865-1309053204.png

    问题:
    按照上面文档说明的路由表的方案的话,在每个节点都订阅#的话可能会导致一条消息被路由多于1次。
    论证:
    假设集群中有两台机器A、B,
    A维护sub Topic:A1、A2
    B维护sub Topic:B1、B2
    在A、B分别订阅#,那么在B上pub topic A1的情况下,B会将改消息路由给A,实际上B、A收到了重复了一条消息。
    解决方案:
    在一些场景上需要为topic设计前缀,前缀设计方案:
    * 负载单元,每台机器的负载能力不一致,可以设计A机器的负载单位数量为3,B机器的负载单位为2,此时A机器应该有/A1/、/A2/、/A3/,B应该有/B1/、/B2/;
    按照业务划分,例如:厂商、地区、聊天室;
    如果上面猜测为实际的话,对于系统的负载和逻辑都有很大的影响,那么解决方案为
    topic的设计方式:
    A维护sub topic为A/A1、A/A2
    B维护sub topic为B/B1、B/B2
    在A上sub topic为A/#
    在B上sub topic为B/#
    * 也可以只在A或者B上sub #,不推荐这种方式

    集群中使用auth插件,auth插件的数据驱动为Redis、MySQL的话,可以使用同一个数据库。

    转载于:https://www.cnblogs.com/zzx11235/articles/8093702.html

    展开全文
  • 1.topic的命名原则和基础 topic可以划分为多个层级,如果是不同主题,采用“/”分隔, 举例:“/serve/temperature/12345678” 例子中分为了3层主题,第一层表明这是服务器,第二场表明数据是温度,第三层表明这是...

    1.topic的命名方式举例

    topic可以划分为多个层级,不同层次主要采用“/”分隔,相互之间的关系是层层递进。
    比如:“/地球/中国/山东省/临沂市/兰山区/特定的电话号”

    “/”即主题层级分隔符。(在第2部分会讲解不同符号作用)

    以这个Topic为例讲解:“/serve/temperature/12345678”

    此Topic分为了3层主题,第一层表明这是服务器,第二场表明数据是温度,第三层表明这是哪个设备。
    第三层为什么是数字,这里是假设的IMEI码,用来找到特定的某台设备。
    此处插播:
    什么是IMEI码?
    在嵌入式开发和物联网中,4G模块,2G模块,NB模块等,都会有一个唯一的IMEI码。这就是国际移动设备识别码(International Mobile Equipment Identity,IMEI),即通常所说的序列号,

    2.topic命名常见方式

    1.主题层级分隔符—“/”:

    用于分割主题层级,/分割后的主题,这是消息主题层级设计中很重要的符号

    2.单层通配符—-“+”:

    单层通配符只能匹配一层主题。e.g: aaaa/+ 可以匹配 aaaa/bbbb ,但是不能匹配aaaa/bbbb/cccc。 单独的+号可以匹配单层的所有推送

    3.多层通配符—-“#”:

    #:多层通配符,多层通配符可以匹配于多层主题。比如: aaaa/# 不但可以匹配aaaa/bbbb,还可以匹配aaaa/bbbb/cccc/dddd。 也就是说,多层通配符可以匹配符合通配符之前主题层级的所有子集主题。单独的#匹配所有的消息主题.

    4.通配符 —-“$”:

    通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:

    xx/xx/xx/xx$

    其它情况下都表示匹配一个字符。

    如果客户端想同时接受以 “SYS/”开头主题的消息和不以 开头主题的消息, 它需要同时订阅 “#” 和 ““$SYS/#”。
    引用自

    https://baijiahao.baidu.com/s?id=1658785926054211708&wfr=spider&for=pc

    展开全文
  • MQTT topic设计

    千次阅读 2019-03-29 19:49:56
    翻译自:https://harizanov.com/2014/09/mqtt-topic-tree-structure-improvements/ 我已经很久没有对我MQTT主题树结构感到不满,并对如何改进它做了一些思考/研究。谷歌向我指出了Tinkerman关于类似主题文章...

    翻译自:https://harizanov.com/2014/09/mqtt-topic-tree-structure-improvements/

    我已经很久没有对我的旧MQTT主题树结构感到不满,并对如何改进它做了一些思考/研究。谷歌向我指出了Tinkerman  关于类似主题文章,我开始计划改进。

    我将重复我在一篇文章中使用的引用“如果你无法衡量它,你就无法改进它”,只有这次重新将其称为“如果你无法想象它,你就不能改进它”。是的,我的第一个努力是可视化我的MQTT主题树,其余的应该相当容易。

    Ben Hardill在这个主题上 做了一些出色的工作,他的D3 MQTT主题树可视化工具正是我所需要的。让它发挥作用是非常棘手的。我想使用新的Mosquitto MQTT支持websockets,所以我不得不升级到新版本。在构建Mosquitto时必须明确启用Websocket支持,幸好  Jeremy Gooch已经创建了*优秀*指令  ,如果没有这些,我无法做到。

    最后,我不得不修改Ben的  mqttws31.js文件以使用Mosquitto 1.4,我的固定版本在Github上

    随着可视化工作,我做了大约1003次迭代以获得以下结构,仍然有许多节点要添加并且形状粗糙:

    根

     

    根包含三个文件夹,用于将我连接的东西分组为“places”,“cloud”和“people”。我计划在那里添加更多类别,例如,跟踪车辆的“对象”。

    “地点”将包含属于我的物联网家庭自动化系统的地点和属性,从“我们的地方”开始:

     

    我们的地方

    “我们的地方”是一个有花园的房子,所以我打破了两个:“房子”和“外面”。“房子”分为三个子类别:“普通”,“一楼”和“二楼”。“common”部分将包含无法以其他方式分组的公共组件。“外面”显然会在花园里组合任何东西,如外部条件,温室,前门等(所有WIP)

    “Common”类别目前有这些叶节点:

     

    共同

     

    “raspberry pi”分支扩大了:

     

    覆盆子pi

    该“rfm2pi”叶子代表rfm2pi板处理该无线传输,它到来,走出去的叶子。“out”主题用于传输,例如,我用它每5分钟发送一次时间包,并将控制包发送到远程节点。Node-RED  订阅“in”主题中的不同NodeID叶子以处理原始数据包并进一步处理它,向其他分支提供处理过的数据。

    这个分支中的其他叶子是:

    other_common

     

    “功率监视器”节点数据由我的传感屏蔽项目提供,仍然可以很好地工作。

    “太阳能”节点数据由这里描述的热水箱控制器提供,固件从那时起显着改变,但硬件是相同的。请注意,它是一个带有“in”和“out”叶片的双向节点,因为它可以控制水箱中的加热器元件,如果阳光少于加热水所需的阳光。

    “门铃”节点由我的IoT门铃项目提供

    “安全系统”节点由我的家庭安全系统接口项目提供

    “热泵”节点仍在进行中,我计划同时具有“进入”和“出”子主题,因为它可以控制和提供有关热泵状态的信息。在那里使用我的Daikin控制器项目

     

    “一楼”分支具有以下结构:

    第一层

     

     

    我的朋友,OpenEnergyMonitor的 Glyn Hudson 给我发了一个EmonGLCD单元作为礼物,这是“厨房”节点温度的数据提供者。

    我有一个火灾传感器报警项目,正在为“厨房”分支中的“火警”节点供电。

    房子的门,窗和PIR状态由我的安全系统接口项目提供。这些数据有助于中央供暖系统,我计划在窗户打开时停止房间温控器。

    客厅温度由Funky + DS18b20项目提供

    电视状态由设备跟踪项目提供。我也可以使用LG TV控制器项目控制其状态。

     

     

    “二楼”分支有很多待办事项,但目前的形状如下:

    二楼

     

    室温数据提供商是   Funky + DS18b20项目

    PS3游戏控制台状态由  设备跟踪项目提供

     

    “Outside”分支看起来像这样,我还有更多分支要添加:

    外

     

     

    我有两个软件机器人来提供WeatherUnderground的预测和当前的天气数据,非常实用,因为我没有雨/压力/风传感器。我使用预测数据向自己发送霜冻警报并为此类活动准备花园。仍然需要博客关于这些,因为我现在在Node-RED中做这一切。

    惊恐+ DHT22项目为外部温度/湿度的数据提供者。通过增加计算的露点也可以丰富这些数据。

     

    “云”分支自然地将所有与云连接的“事物” 分组,例如EmonCMSPushbulletTwitter,电子邮件,Twilio等。仍然是WIP。

    云

     

    Node-RED流程监视emoncms / out主题并将该数据发送到EmonCMS

    twitter / out主题是发布到我家的Twitter帐户的内容。跟着它?

     

     

    ..最后是“人民”分支:

    人

     

    存在检测项目为我和妻子在家庭主题的存在提供了支持。

    我的键盘项目正在跟踪重量。

    我的位置正在使用OwnTracks进行跟踪,仍然需要关于该项目的博客。

     

    这大致是我现在在MQTT主题树重组项目上的立场。我喜欢看D3的可视化器,它是动画的,数据随着它的到来而飞,非常漂亮。我喜欢将它想象成我家的中枢神经系统可视化。

    展开全文
  • MQTT topic匹配规则基础1.主题层级分隔符—“/”:用于分割主题层级,/分割后主题,这是消息主题层级设计中很重要符号e.g:aaaa/bbbb和 aaaa/bbbb/cccc 和aaaa/bbbb/cccc/dddd ,这样消息主题格式,是一个层层...

    MQTT topic匹配规则基础

    1.主题层级分隔符—“/”:

    用于分割主题层级,/分割后的主题,这是消息主题层级设计中很重要的符号

    e.g:aaaa/bbbb和 aaaa/bbbb/cccc 和aaaa/bbbb/cccc/dddd ,这样的消息主题格式,是一个层层递进的关系,可通过多层通配符同时匹配两者,或者单层通配符只匹配一个。 这在现实场景中,可以应用到:公司的部门层级推送、国家城市层级推送等包含层级关系的场景。

    2.单层通配符—-“+”:

    单层通配符只能匹配一层主题。e.g: aaaa/+ 可以匹配 aaaa/bbbb ,但是不能匹配aaaa/bbbb/cccc。 单独的+号可以匹配单层的所有推送

    3.多层通配符—-“#”:

    #:多层通配符,多层通配符可以匹配于多层主题。比如: aaaa/# 不但可以匹配aaaa/bbbb,还可以匹配aaaa/bbbb/cccc/dddd。 也就是说,多层通配符可以匹配符合通配符之前主题层级的所有子集主题。单独的#匹配所有的消息主题.

    4.通配符 —-“$”:

    通配符“$”表示匹配一个字符,只要不是放在主题的最开头,即:

    $xx/$xx/xx$

    其它情况下都表示匹配一个字符。

    如果客户端想同时接受以 “SYS/”开头主题的消息和不以 开头主题的消息, 它需要同时订阅 “#” 和 ““$SYS/#”。

    5.总结:

    a、所有的主题名和主题过滤器必须至少包含一个字符b、主题名或主题过滤器以前置或后置斜杠 “/” 区分c、只包含斜杠 “/” 的主题名或主题过滤器是合法的d、主题名和主题过滤器是 UTF-8 编码字符串, 它们不能超过 65535 字节e、主题名和主题过滤器是区分大小写的注: 单层通配符和多层通配符只能用于订阅(subscribe)消息而不能用于发布(publish)消息,层级分隔符两种情况下均可使用

    MQTT topic 设计实践:

    不要在最前面加/比如:/home/device/light, 等于在最前面有一个空字符串层级,这完全没有必要而且增加了broker之类的处理,home/device/light才是合理的。就使用英文+数字字符,不要使用空格、特殊字符这些都会增加处理的复杂性,有时候还会有兼容性问题将设备ID或识别码包含在topic中多方面原因:便于订阅特定设备、便于后续的过滤、便于权限控制不要在运行中创建 topic这个好理解,交流还是有预期比较好。在规模较大的系统中,随意的创建 topic 会导致维护困难、处理复杂度增加,最主要的肯定非常容易导致遗漏和未知行为。命名简单明确太长了看太累,看不懂会困惑,太累或困惑都容易出错;topic 应该尽可能细致,能详细定位到不同的设备和消息

    Mosquitto 系统topic功能

    mosquitto的系统topic主要是以$SYS开头的topic,这些topic只能mosquitto自己发送,客户端只能订阅,无法发送;mosquitto的系统topic主要用于mosquitto对外发布一些自身状态的消息,例如当前客户端连接数量等等,如下所示:

    当前mosquitto维持的客户端数量:$SYS/broker/clients/total

    当前mosquitto维护的活跃的客户端数量:$SYS/broker/clients/inactive等等;

    展开全文
  • 但是MQTT的通信方式是通过发布/订阅的方式进行的。笔者不知道他是否跟设计模式中的发布订阅模式有没有关系。可是他们思想却有一点相似之处。客户端知道服务上有很多个主题。就好比如说有很多消息的分类一样子。有...
  • MQTT主题Topic讲解

    万次阅读 2018-09-06 17:17:17
    但是MQTT的通信方式是通过发布/订阅的方式进行的。笔者不知道他是否跟设计模式中的发布订阅模式有没有关系。可是他们思想却有一点相似之处。 客户端知道服务上有很多个主题。就好比如说有很多消息的分类一样子。有...
  • 主题的设计是非常重要,首先需要了解就是MQTT主题过滤规则。1、topic定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题payload,才能进行通信。2、 主题层级分隔符—“/”主题层级分隔符使得...
  • (1) 主题层级分隔符 / : 用于分割主题层级,/分割后主题,这是消息主题层级设计中很重要符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样消息主题格式,是一个层层递进关系,可通过多层...
  • MQTT--topic(主题)设计

    万次阅读 多人点赞 2017-10-27 01:05:00
    参考博客:http://blog.csdn.net/amwha/article/details/74364175 主题的设计是非常重要,首先需要了解就是MQTT主题过滤规则。1、topic 定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题...
  • MQTT topic匹配规则

    千次阅读 2019-03-01 11:40:26
    转载自:MQTT topic匹配规则基础 主题层级分隔符 / : 用于分割主题层级,/分割后主题,这是消息主题层级设计中很重要符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样消息主题格式,是一个...
  • MQTT topic规则和经验

    2021-02-25 08:35:58
    MQTT topic匹配规则基础 1.主题层级分隔符—“/”: 用于分割主题层级,/分割后主题,这是消息主题层级设计中很重要符号 e.g:aaaa/bbbb和 aaaa/bbbb/cccc 和aaaa/bbbb/cccc/dddd ,这样消息主题格式,是一...
  • 但是MQTT的通信方式是通过发布/订阅的方式进行的。笔者不知道他是否跟设计模式中的发布订阅模式有没有关系。可是他们思想却有一点相似之处。客户端知道服务上有很多个主题。就好比如说有很多消息的分类一样子。有...
  • MQTT topic分隔符与通配符

    千次阅读 2017-03-17 16:25:36
    主题层级分隔符 / : 用于分割主题层级,/分割后主题,这是消息主题层级设计中很重要符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样消息主题格式,是一个层层递进关系,可通过多层通配符...
  • Python 的设计哲学强调代码可读性和简洁语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。Python 让开发者能够用更少代码表达想法,不管是小型还是大型程序,该语言都试图让程序结构清晰...
  • MQTT topic匹配规则基础

    万次阅读 2017-02-09 17:32:58
    主题层级分隔符 / : 用于分割主题层级,/分割后主题,这是消息主题层级设计中很重要符号。 比方说: aaa/bbb和 aaa/bbb/ccc 和aaa/bbb/ccc/ddd ,这样消息主题格式,是一个层层递进关系,可通过多层通配符...
  • 没想到的是IoT service不仅仅是一个MQTT Broker,”他“还”好心“帮你多做了一件事情,就是topic转换,哈哈,没想到吧,subscribe的topic竟然和publish的topic不一样! 神马?!是的,你没听错!当然,多加topic...
  • MQTT

    万次阅读 多人点赞 2018-09-16 05:24:46
    设计目的主要是为低带宽和不稳定网络环境下物联网设备提供服务。 MQTT概念 订阅(Subscribtion): 订阅包含主题筛选器(Topic Filter)和最大服务质量(QoS)。订阅会与一个会话(Sessio...
  • mqtt

    2021-01-30 14:23:01
    是为硬件性能低下远程设备以及网络状况糟糕情况下而设计的发布/订阅型消息协议, MQTT 协议定义了两种网络实体:消息代理(message broker)与客户端(client)。其中,消息代理用于接收来自客户端消息并转发...
  • 文章目录一、前言二、网关作用2.1 指令转发2.2 外网通信2.3 协议转换2.4 设备管理2.5 边沿计算(自动化控制)三、网关内部进程之间通信3.1 网关中需要哪些进程3.2 MQTT消息总线3.3 Topic 的设计3.4 与 DBUS 总线...
  • emqttd项目经常有开发者问MQTT消息QoS问题。MQTT作为PubSub协议,QoS保证不是端到端,是客户端与...另外,接收端收到消息QoS级别,最终取决于发送消息Qos和订阅Topic的Qos,表格如下: 发布消息QoS ...
  • MQTT-SN协议阅读之MQTT-SN vs MQTT

    千次阅读 2017-08-02 14:29:38
    MQTT-SN设计得尽可能靠近MQTT,但设计得更适应无线通信环境,例如低带宽高连接失败,消息长度短等情形,也适应于低成本,电池驱动存储资源有限设备。 相比MQTTMQTT-SN有如下显著特征: 1. CONNECT message被...
  • 1.mqtt的javascript客户端如何订阅多个主题 2.利用MQTT一次订阅多个主题 3.MQTT--topic(主题)设计 4.MQTT主题通配符 5.MQTT topic中的分隔符与通配符 6.MQTT入门(6)- 主题Topics ...
  • MQTT是用的paho的包,直接到官网下的,支持MQTT3.1.1,MQTT的关键部分(MqttClient类、MqttClientCallback类等)添加了中文注释,可以中英文对比,没有修改官方的代码。MQTT比较小就不裁剪了。这个有5M多(87%)都是...
  • Golang:MQTT服务集群共享主题设计

    千次阅读 2021-04-03 21:42:21
    本次设计的支持集群共享订阅思路,还存在缺陷,无法支持通配符订阅,正在努力实现中,敬请期待,或者有好点子,欢迎分享哦,谢谢各位。 具体实现用在了该项目中 集群共享订阅 单机共享订阅是非常容易实现,...
  • 关于Topic设计的思考

    2020-04-11 15:36:26
    topic 数量随着业务增长逐渐增多,如何正确的设计 topic 成了当务之急。在这篇文章中,将重点讨论MQTT 主题和最佳实践。 Topics 分隔符"/" topic是UTF-8字符串,broker用于过滤客户端消息,一个topic由一个...
  • 该demo主要围绕mqtt如何实现前后端实时通信及如何设计优雅主题(topic),适用于物联网mqtt通信集成方案或实时性较强通信功能。
  • 一篇搞定MQTT

    2020-07-27 11:14:09
    的设计思想是轻巧、开放、简单、规范易于实现。这些特点使得它对很多场景来说都是很好选择,特别是对于受限环境如机器与机器通信(M2M)以及物联网环境(IoT)。 MQTT是底层传输协议基础设施。 客户端使用...
  • func matchTopicS(topic string) []string { tp := strings.Split(topic, "/") ret := list.New() ret.PushBack(tp[0]) // 直接限制订阅主题第一个不能是通配符,并且不能是单纯一个/,所以该方法就.
  • MQTT客户端订阅时遇到问题

    千次阅读 2019-03-22 18:24:37
    1.如果有多个事件需要订阅,你会怎么设计,是每一个都作为一个topic吗? 每一个事件都列一个topic是可行,每个事件响应后直接处理,但是你在订阅时候可能会有些麻烦,而且不利于后期扩展,如果后面你又多了一个...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

mqtt的topic设计