ブロックを積みながら(63) Node-RED、流量制限ができる、delayノード

Joseph Halfmoon

今回の delay ノードは、本来到着した msg を一定時間遅延させて送り出すものです。しかしこの遅延機能を使ってメッセージの流量制限もできると。時間あたりのmsgの「流量」を決めると、それを超えるmsgはため込まれ流量制限の範囲で下流に流しだされます。フローの中のまさにダムみたいなもの?

※「ブロックを積みながら」投稿順 index はこちら

今回の実験フロー

injectノードからmsgにarrayを載せて送り出し、splitノードでarrayを分割します。これにより生じた多数の msg が下流に殺到することになります。それをdelayノードで一端受け止め、その下流のデバッグノードで観察する、と。

flow0

Flow Controlとタイトルがついた delayノードの下に「0」と表示されているのをおぼえておいてくだされ。

Injectノードの設定

InjectノードではJSON形式の出力として要素10個のArrayを送り出すようにしてあります。こんな感じ。

Inject

splitノードの設定

splitノードは、「名前」欄に名前をつけただけで他の設定はデフォルトのままです。デフォルトで配列(Array)が到来すると要素1個毎に分割する設定です。ここで1個のmsgは10個に増殖する筈。

split

delayノードの設定

delayノードの「動作」には「遅延させる」設定と「流量制限」があるので流量制限を選択しています。流量は毎秒何通といった設定から可能ですが、ここでは、毎分1メッセージ設定としました。単にデバッグウインドウでの観察の都合に良いというだけです。

delay

動作結果の観察

デバッグウインドウを開いておくと、Delayノードで流量制限されたメッセージの到着の様子を観察できます。最上流の配列には、1,2,3と数字が詰めてあったので、メッセージには1,2,3と数値が順番に載っている筈。Injectノードのボタンを押すと早速最初のメッセージ「1」が到来しますが、しばらく待ちが入ります。到来時刻のタイムスタンプで後続メッセージの到来時刻が確認できます。

DebugWindow

ほぼ1分毎に後続のメッセージが到来してます。後になるほど微妙に1,2秒遅くなっているのは、内部の処理がそれほど時間に厳格でもないということ?わかりません。

なお、Dalayノードが「貯め込んでいる」メッセージ数はフローエディタの画面でDelayノードの下に小さな数字で表示されるみたいです。こんな感じ。flow9

ただDelayさせるというのはなんだかな~と思っていたですが、こういう機能、要る時はありそうですな。特に下流でハード制御のような一度にさばける分量が決まっているケースでは上流の門番必要だし。

ブロックを積みながら(62) Node-RED、時間経過で引き金を引く、triggerノード へ戻る

ブロックを積みながら(64) Node-RED、外部プログラムの実行ができるexecノード へ進む