Node-RED中join节点能否自动统计接入的消息线路数量?
Node-RED Join节点动态识别接入线路数解决方案
原生Join节点支持情况
原生join节点不支持自动检测接入线路数量,其触发输出的消息份数阈值、合并规则等参数均需提前在配置面板手动指定,没有内置动态读取上游连线数量的能力。
自定义实现方案
如果需要动态适配接入线路数,可以通过Function节点自行实现自定义Join逻辑,相关实现方法如下:
- Function节点可以正常获取当前节点的接入线路数:
你可以通过Node-RED内置的流配置API,统计指向当前节点的输入连线总数,参考代码如下:// 获取当前Function节点的自身ID const currentNodeId = env.get('NR_NODE_ID') // 拉取全量流的配置数据 const flowConfig = RED.nodes.getFlows() let inputLineCount = 0 // 遍历所有节点的输出连线,统计指向当前节点的连线数 flowConfig.flows.forEach(node => { if (!node.wires) return node.wires.forEach(outputPortWires => { outputPortWires.forEach(target => { if (target.id === currentNodeId) inputLineCount++ }) }) }) // 将统计到的接入线路数存入节点上下文,仅部署后首次运行时统计即可 if (!context.get('targetMsgCount')) { context.set('targetMsgCount', inputLineCount) } - 拿到接入线路总数后,即可自行实现Join逻辑:通过节点上下文缓存不同来源的消息,当收到的消息数量等于统计得到的
targetMsgCount时,合并所有消息输出,再清空上下文等待下一批次消息即可。
内容的提问来源于stack exchange,提问作者raylight
相关产品推荐
相关产品推荐

