Delayノードを使う(その2)
ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回も前回に引き続きDelayノードを使ってみます。
遅延中に中断・即時実行する
最初のサンプルは「flows > node-red > function > delay > 03 - Reset or flush pending message」です。resetということは遅延中に中断ができるようです。flushというのはトイレの水を流すアレですね。
「Hello World!」を実行すると、1分間の遅延を経てログ「Goodbye, World!」を出力します。遅延中にresetを実行すると、中断しそれ以降のフローは実行されません。一方、遅延中にflushを実行すると、遅延が即時実行されます。冒頭で書いたとおり、トイレの水を流すイメージです。ポイントとしては「msg.reset」や「msg.flush」に「true」を設定してDelayノードに流し込むと、制御できる点です。resetはJavaScriptで言うところのclearTimeout()関数的な位置付けですかね。
メッセージの実行速度を制限する
次のサンプルは「flows > node-red > function > delay > 04 - Limit message rate」です。実行速度を制御できるようです。
フローの頭から順番に見ていきます。まずはInjectノードから。msg.payloadに0〜9の数字を要素に持つ配列をJSON形式で設定しています。
続いてSplitノード。msg.payloadの配列を固定長1で分割してそれぞれmsg.payloadに設定してフローを流す、ということになるみたいです。これでSplitノードの出力ポートから10個のmsgオブジェクトが出力されます。
さらにDelayノード。メッセージの流量が1メッセージ/秒の割合で制限されるようです。この設定により、入力ポートから一気に流れてくる10個のmsgオブジェクトに流量制限が課せられて、1秒に1メッセージの割合で出力されるようになります。
実行すると、ログが1秒ごとに10回出力されます。
まとめ
今回の内容をまとめます。
- Delayノードは遅延中に中断や強制実行ができる
- フローの流量制限ができる
次回もDelayノードを見ていきます。
コメント
コメントを投稿