流程控制-消息限流
按指定频率处理消息
问题背景
希望以固定的速率处理消息,忽略到达过快的消息。例如,有一个传感器每2秒发送一次数据,但只需要每 5 秒处理一次即可。
解决方案
延迟 节点来限制通过它的消息的速率,并启用丢弃中间消息的选项。
示例

示例JSON
[{"id":"8a1bcd7d.f6b67","type":"inject","z":"e028a121bc4ae061","name":"1s 发送一次","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"2","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"[0,1,2,3,4,5,6,7,8,9]","payloadType":"json","x":250,"y":1800,"wires":[["bd4bdd42.bd1b"]]},{"id":"bd4bdd42.bd1b","type":"delay","z":"e028a121bc4ae061","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"5","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":510,"y":1800,"wires":[["be20c513.237c78"]]},{"id":"be20c513.237c78","type":"debug","z":"e028a121bc4ae061","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":700,"y":1800,"wires":[]}]
运行结果
运行示例JSON后,调试 节点会每 2 秒发送一次消息,经过消息延迟节点后,会每 6 秒输出一次消息,而忽略了中间的消息。每 6s 输出一次不是每 5s 输出是因为发送消息的间隔是2s一次,但是速率限制是 5s 放行一次,所以注入节点发送三次才会有一次刚好处于延迟节点的放行条件区间,如果将注入节点的周期改为1s一次就可以看到每隔5s输出一次
