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

ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回はJoinノードの2回目です。

確認するサンプルは、「読み込み > サンプル > flows > node-red > sequence > join > 02 - Manual join mode」です。今度は「手動モード」だそうです。7つのフローから構成されています。ちょっと多すぎですが、それだけいろいろな使い方ができるのだと思います。

指定した個数のメッセージごとに結合する


一番上の段は、指定した個数のメッセージごと結合するサンプルです。左側のTemplateノードから設定を見ていきます。ここでは「msg.payload」に改行区切りの文字列を指定しています。


続いて、その右側にあるSplitノードです。msg.payloadには文字列が格納されているので、改行(\n)ごとに個別のmsgオブジェクトに分割します。今回の場合、4つのメッセージに分割されます。


続いて、Joinノードは以下のように設定されています。


たくさん設定が見えますが、以下の条件でメッセージを結合して送信するようです。
  • 結合対象の入力メッセージのプロパティは「msg.playload
  • 出力はカンマ(,)区切りの文字列
  • msgオブジェクトを2つ受け取るか「msg.complete」プロパティが設定されたメッセージを受信したタイミングで送信
実行すると、4つに分割されていたであろうメッセージが以下のように2つに結合されています。


指定した時間内に受信したメッセージを結合する


2段目のフローでは、指定した時間内に届いたメッセージを結合します。例によって左から順に設定を見ていきます。TemplateノードとSplitノードは上述のサンプルと同じなので省略します。

続いて、Delayノードです。Splitノードで分割したメッセージの流量を1メッセージ/秒に制限します。


最後に、このフローのポイントとなるJoinノードです。最初のメッセージ受信から2秒経ったらメッセージを出力します。言い換えると、2秒以内に受信したメッセージを結合するってことでしょうね。


これを実行すると、最初に紹介したフロー同じようなログが出力されますが、2件出力されるログのタイムスタンプが2秒空いています。Joinノードから2秒毎に結合されたメッセージが出力されたことがわかります。


まとめ

まだまだ先は長そうなので、このへんで一旦まとめておきます。
  • Joinノードの手動モードは以下の条件でメッセージを結合して出力できます。
    • 指定した個数のメッセージごと
    • 指定した時間内に受信したメッセージごと
  • 文字列結合する場合、区切り文字を指定できる
  • 結合対象のプロパティを指定できる
Joinノードシリーズはもう少し続きます。

コメント

このブログの人気の投稿

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

Execノードを使う

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