npm 包 node-red-contrib-deduplicate-msg 使用教程

简介

node-red-contrib-deduplicate-msg 是一个利用 Node-RED 实现的 npm 包,可以用于过滤掉重复的消息。这个 npm 包的优点在于,可以支持自定义重复条件但也可以使用默认配置进行使用,而且可以在 Node-RED 上得以更好的应用。本文将详细介绍 node-red-contrib-deduplicate-msg 的使用方法,包含示例代码。

安装

在安装 Node-RED 之后,使用以下命令安装 npm 包:

或者在 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


纠错
反馈