1 前言
本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,扫描以下二维码即可关注。
也可点击链接访问:NodeRed应用——NodeRed中MQTT主题的动态订阅与发布
2.概述
在NodeRed中MQTT是必不可少的协议,它是与外界通信的桥梁,我不知道有多少人在使用一个节点订阅一个主题,我之前也是那样使用的,在我写同步开关流程的时候,发现这种方式完全没有办法满足我的需求,偶然的机会发现MQTT还有动态订阅,让我如获至宝。
3.MQTT动态订阅概念
我不知道如何准确解释动态订阅概念和定义,对于我来说就是能够同时订阅和发布多个主题,而不是用多个MQTT节点。至于相关文档我也记不清在哪里看到的,已经找不到出处,不管怎样这个流程我已经在使用并保存。
4.动态订阅的流程
首先需要定义订阅的主题,当然只有一个主题也是可以的,至少可以少用一个发布节点。按照相关文档我写了一条nodered函数如下:
上面函数中可设置多条主题,在customTopics中根据自己需要设置即可,以上设置的主题是我用于测试且存在的主题。值得注意的是函数需要用inject节点触发一次才能启动函数,然后函数连接MQTT in节点,并改为动态订阅:
最后添加一个debug节点,用于测试订阅,流程图如下:
5. 流程测试
测试订阅流程如下,输出已经订阅主题:
测试订阅的主题的消息如下:
输出正确的主题和消息表示动态订阅和发布成功,同时我在函数上增加了状态显示,可以显示订阅的主题数量。
以上动态订阅流程虽然是一个简单应用,不仅可以减少节点的使用,在大型流程中也有着举足轻重的地位,后面大部分流程都会用到,写这篇文章目的是先让大家了解基本应用,在后面的流程中便于理解。