Node-RED使用指南:21:限速的消息抛弃或者消息队列机制
发布日期:2021-06-30 20:18:17 浏览次数:2 分类:技术文章

本文共 2087 字,大约阅读时间需要 6 分钟。

在这里插入图片描述

trigger是Node-RED中的一个常用组件,这篇文章继续结合实例介绍使用trigger进行防止抖动或者消息队列机制的方法。

事前准备

以容器方式启动Node-RED服务,启动命令如下所示:

启动命令:docker run -it -p 1880:1880 -v $PWD/data:/data -e TZ=Asia/Shanghai --name nodered -d nodered/node-red:1.0.4

限速策略:消息队列 vs 消息抛弃

限速必然导致数据无法及时处理完毕,对于这些消息一般有两种做法较为常见:

  • 消息队列:按照消息的顺序逐条进行
  • 消息抛弃:只处理一定时间段内的第一条,其余的全部抛弃

消息队列是缺省的对应方式,限速之后会对消息队列里的消息逐条处理,很多场景都是可以理解的。而消息抛弃的机制则是抛弃指定时间段内的其余信息,比如同样的操作,连续点击多次,有可能是误操作,实际上一定时间内只需要一此操作就可以了,比如代码提交引起的自动构建,无论是谁的代码提交进行的构建,对这个阶段所有的代码提交者,这次构建的结果都是可以共用的,这种情况下就完全可以使用消息抛弃的机制。比如Jenkins中在很早的版本就是使用类似的方式来控制Rush Hour的性能瓶颈。

消息队列方式

flow设定

使用如下flow来对消息队列方式的限速进行说明

在这里插入图片描述

  • 输入消息1-3节点:以输入消息1为例,进行说明,为Inject节点的缺省设定
    在这里插入图片描述
  • limit 1 msg/3s:使用trigger缺省设定,间隔设定为3s
    在这里插入图片描述
  • 结果显示节点:Debug节点的缺省设定

结果确认

进行部署操作并,手动执行(每个Inject节点快速点击几下)确认结果如下:

在这里插入图片描述

消息抛弃方式

和消息队列方式相比,实际上只是多选了一个复选框,详细信息如下:

flow设定

使用如下flow来对消息抛弃方式的限速进行说明

在这里插入图片描述

  • 输入消息1-3节点:以输入消息1为例,进行说明,为Inject节点的缺省设定

    在这里插入图片描述

  • 结果显示节点:Debug节点的缺省设定

结果确认

进行部署操作并,手动执行(每个Inject节点快速点击几下)确认结果如下:

在这里插入图片描述

JSON格式的flow

[{
"id":"891040ad.e0b96","type":"inject","z":"73554227.4474dc","name":"","topic":"","payload":"输入消息2","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":260,"y":160,"wires":[["c6f6eda1.50745"]]},{
"id":"c6f6eda1.50745","type":"delay","z":"73554227.4474dc","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"3","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":480,"y":160,"wires":[["98da75ae.e12448"]]},{
"id":"98da75ae.e12448","type":"debug","z":"73554227.4474dc","name":"结果显示","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":680,"y":160,"wires":[]},{
"id":"140a50de.1f611f","type":"inject","z":"73554227.4474dc","name":"","topic":"","payload":"输入消息3","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":260,"y":240,"wires":[["c6f6eda1.50745"]]},{
"id":"e7207c13.5a627","type":"inject","z":"73554227.4474dc","name":"","topic":"","payload":"输入消息1","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":260,"y":80,"wires":[["c6f6eda1.50745"]]}]

转载地址:https://liumiaocn.blog.csdn.net/article/details/104747400 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Node-RED使用指南:22:定制化Node的使用方法
下一篇:Node-RED使用指南:20:使用trigger进行限速控制

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月16日 07时45分45秒