简介
node-red-contrib-deduplicate-msg
是一个利用 Node-RED 实现的 npm 包,可以用于过滤掉重复的消息。这个 npm 包的优点在于,可以支持自定义重复条件但也可以使用默认配置进行使用,而且可以在 Node-RED 上得以更好的应用。本文将详细介绍 node-red-contrib-deduplicate-msg
的使用方法,包含示例代码。
安装
在安装 Node-RED 之后,使用以下命令安装 npm 包:
npm install node-red-contrib-deduplicate-msg
或者在 Node-RED 的 Manage Palette
中搜索该包,直接进行安装。
使用方法
在 Node-RED 中,需要将 node-red-contrib-deduplicate-msg
放入流程中。然后,就可以将输入的消息连接到该节点,并将输出的消息连接到下一个流程的节点上。
1. 默认配置
当 node-red-contrib-deduplicate-msg
不附加条件时,它会将发送到输入端口(左侧)的所有消息重复检查后,丢弃掉已经曾经出现过得到消息,只保留第一次收到的消息,并发送到输出端口(右侧)。
2. 自定义配置
使用者可以轻松地配置重复条件,在不同场景下,可以使用不同的条件,以达到更好的过滤效果。
2.1. 以属性为条件
如果消息的属性与之前消息的属性值相同,则认为这两个消息是重复的。比如我们要过滤相同的 IP 地址,那么我们可以使用以下属性:
{ "ip": msg.payload.ip }
其中 msg.payload.ip
是要过滤的 IP 地址,以此为条件进行重复消息的过滤。
2.2. 以完整消息为条件
过滤器可以使用 msg
对象自己完成去重。例如,我们只需要考虑要过滤的数据本身,那么我们可以使用如下配置:
{ "filter": "msg.payload" }
2.3. 自定义 JavaScript 函数
如果以上两种方法无法满足需求,那么 node-red-contrib-deduplicate-msg
允许使用自定义 JavaScript 函数进行消息重复检查。
if(msg.payload > 100) { return msg.payload; } else { return false; }
在以上的 JavaScript 代码中,如果要过滤的消息的 payload 值大于 100
,那么我们就保留该消息(返回 true
),否则就将该消息过滤掉(返回 false
)。
示例代码
下面是一个简单的 Node-RED 流程拓扑图及相应代码。
[ { "id": "07ccc768.76b58", "type": "inject", "z": "43376a41.189f04", "name": "", "topic": "", "payload": "{\"ip\":\"192.168.1.1\",\"name\":\"test\"}", "payloadType": "json", "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "x": 200, "y": 240, "wires": [ [ "d55e41fc.796b68" ] ] }, { "id": "d55e41fc.796b68", "type": "deduplicate-msg", "z": "43376a41.189f04", "name": "", "filter": "msg.ip", "x": 580, "y": 240, "wires": [ [ "8a677f5d.037458" ] ] }, { "id": "8a677f5d.037458", "type": "debug", "z": "43376a41.189f04", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 840, "y": 240, "wires": [] } ]
该示例使用了默认的 Filter
规则,即对比消息的完整内容,防止消息的内部完全一致时的重复。当一个消息首次接收到,并进入到 deduplicate-msg
节点后,该消息将保留,随后所有完全相同的消息都将被丢弃,并不会发送到 debug
节点。
总结
node-red-contrib-deduplicate-msg
是一个非常实用且易于使用的 npm 包。它可以轻松地将重复的消息过滤掉,简化了整个流程的复杂度和混乱度。阅读本文后,希望大家已经学会了如何安装、使用和配置该 npm 包,并能够在实际生产环境中灵活应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/600673e0fb81d47349e53d1e