Node-RED使用指南:21:限速的消息抛弃或者消息队列机制

在这里插入图片描述
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"]]}]
发布了1133 篇原创文章 · 获赞 1357 · 访问量 410万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104747400
今日推荐