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()関数的な位置付けですかね。



ちなみに、「Hello World!」Injectノードを連打して、遅延中にflushすると溜まっていいたフローが一気にまとめて実行されます。別の処理を待ちたいけど、フロー終了する際に全部終わるの待ってらんない、ってときにresetやflushして即時終了させる、みたいな用途で使うのかもしれません。

メッセージの実行速度を制限する

次のサンプルは「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ノードを見ていきます。

コメント

このブログの人気の投稿

Joinノードを使う(その1)

Execノードを使う

Joinノードを使う(その4)