コンテンツにスキップ

delayノード

delayノード

概要

delayノードは、受け取ったメッセージを一定時間待ってから後続ノードへ渡したり、一定時間あたりに流すメッセージ数を制限したりするためのノードです。

ロボシュタインのフローでは、外部APIへの連続アクセスを避けたい場合や、通知を一定間隔で送信したい場合、処理の間に待ち時間を入れたい場合などに使用します。

例えば、再起動実行後に30秒待ってから再確認する、アラート通知を1分に1件ずつ送信する、外部APIへのリクエスト数を抑える、といった用途で利用できます。

delayノード設定画面

具体的な活用例(一定時間待ってから後続処理を行う)

再起動処理を実行したあと、一定時間待ってからWebサイトの疎通確認を行う例です。

フローのイメージ図

delayノードのフローイメージ

① 前段の処理を実行する

例えば、対象サーバーの再起動処理を実行します。

② delayノードで一定時間待つ

再起動直後は、サービスがまだ起動中で確認に失敗する可能性があります。 そのため、delayノードで一定時間待ってから後続処理へ進めます。

例:30秒待ってから次のノードへ渡す

③ 後続ノードで確認処理を行う

delayノードの後ろにhttp requestノードなどを接続し、一定時間経過後にWebサイトやAPIの応答を確認します。

このように、delayノードは「すぐに次の処理へ進めず、少し待ってから実行したい」場面で利用できます。

設定項目一覧

必須 項目名 説明
◯ 動作 「メッセージの遅延」か「メッセージの流量制限」かを選択します。
◯ 遅延の種類(メッセージの遅延) 「指定した時間遅延」「ランダム時間の遅延」「msg.delay に遅延を設定」から選択します。
◯ 時間/範囲(メッセージの遅延) 待たせる時間、またはランダムに待たせる時間の範囲を指定します。単位はミリ秒・秒・分・時間・日から選択します。
◯ 対象(メッセージの流量制限) 「全てのメッセージ」をまとめて制限するか、「msg.topic毎」に制限するかを選択します。
◯ 流量(メッセージの流量制限) 「○メッセージ/○秒(分・時間・日)」の形式で、一定時間あたりに送信するメッセージ数を指定します。
msg.rate(ミリ秒単位)で流量値を上書き(メッセージの流量制限) チェックを入れると、msg.rate で流量の間隔を変更できます。
◯ 超過時の扱い(メッセージの流量制限) 流量を超えて届いたメッセージ(中間メッセージ)の扱いを選択します。
名前 フローエディター上で表示されるノード名を任意で指定できます。

「動作」で選択した内容によって、表示される設定項目が変わります。

動作について

delayノードでは、大きく以下の2種類の動作を選択できます。

動作 内容
メッセージの遅延 受け取ったメッセージを一定時間待ってから後続へ渡します。
メッセージの流量制限 一定時間あたりに後続へ流すメッセージ数を制限します。

単純に「少し待ってから次へ進めたい」場合は「メッセージの遅延」を使用します。 「短時間に大量のメッセージを流したくない」場合は「メッセージの流量制限」を使用します。

メッセージの遅延について

「メッセージの遅延」では、以下の方法を選択できます。

遅延の種類 内容
指定した時間遅延 すべてのメッセージを指定した時間だけ待たせます。
ランダム時間の遅延 指定した範囲内でランダムな時間だけ待たせます。
msg.delay に遅延を設定 メッセージの msg.delay の値(ミリ秒)だけ待たせます。msg.delay がない場合は、ノードに設定した時間だけ待たせます。

指定した時間遅延

すべてのメッセージを、同じ時間だけ待たせます。

例:30秒待ってから次のノードへ渡す

再起動後の確認待ち、API反映待ち、処理間の待機などで使用します。

ランダム時間の遅延

指定した範囲内で、ランダムな時間だけ待たせます。

例:1秒〜5秒の間でランダムに待ってから次のノードへ渡す

複数の処理が同時に実行されることを避けたい場合などに利用できます。

msg.delay に遅延を設定

メッセージ側で遅延時間を指定する方法です。 前段のfunctionノードなどで msg.delay を設定しておくと、その値をもとに待ち時間を変更できます。

msg.delay = 30000;
return msg;

この例では、30,000ミリ秒、つまり30秒待ってから後続ノードへ渡します。

メッセージの流量制限について

「メッセージの流量制限」では、一定時間あたりに後続へ流すメッセージ数を制限できます。

例えば、以下のような設定ができます。

  • 1 メッセージ / 1 秒(1秒あたり1件だけ送信する)
  • 5 メッセージ / 1 分(1分あたり5件だけ送信する)

短時間に大量の通知やAPIリクエストが発生する可能性がある場合に利用します。

delayノード流量制限の設定画面

流量制限の対象について

流量制限では、すべてのメッセージをまとめて制限するか、msg.topic ごとに制限するかを選択できます。

対象 内容
全てのメッセージ 受け取ったメッセージ全体に対して、流量を制限します。
msg.topic毎 msg.topic ごとにメッセージを分けて、流量を制限します。

通常は、まず「全てのメッセージ」を対象にすると分かりやすいです。 通知種別やサーバーごとに処理を分けたい場合は、msg.topic を設定したうえで「msg.topic毎」を利用します。

超過時の扱いについて

「全てのメッセージ」を対象にしている場合、流量を超えて届いたメッセージ(中間メッセージ)をどのように扱うかを設定できます。

設定 内容
中間メッセージをキューに追加 メッセージを保持し、流量に合わせて順番に送信します。
中間メッセージを削除 流量を超えたメッセージを破棄します。
2番目の出力で中間メッセージを送信 流量を超えたメッセージを、2番目の出力からすぐに送信します。

通常は「中間メッセージをキューに追加」を使用すると、メッセージを失わずに一定間隔で後続へ渡せます。 例えば「1 メッセージ / 1 秒」で3件のメッセージがまとめて届いた場合、約1秒おきに1件ずつ後続へ渡されます。

一方で、古い通知や重複通知を残したくない場合は、「中間メッセージを削除」を検討します。 この場合、同じ例では1件目だけが後続へ渡され、残りの2件は破棄されます。

msgによる制御

delayノードでは、受け取ったメッセージ内の値によって、待機中のメッセージを制御できます。

プロパティ 内容
msg.delay 「msg.delay に遅延を設定」の場合に、待ち時間を指定します。単位はミリ秒です。
msg.reset 待機中またはキュー内のメッセージを、送信せずにすべて破棄します。
msg.flush 待機中またはキュー内のメッセージをすぐに送信します。
msg.rate 「msg.rate(ミリ秒単位)で流量値を上書き」にチェックを入れている場合に、流量制限の間隔をミリ秒で変更します。
msg.toFront 流量制限のキューで、メッセージをキューの先頭に追加します。

通常の利用では、まず画面上の設定だけで問題ありません。 必要に応じて、functionノードやchangeノードでこれらの値を設定し、delayノードの動作を制御できます。

利用例

例1:30秒待ってから再確認する

再起動処理のあと、30秒待ってからWebサイトの応答を確認する例です。

例1:30秒待ってから再確認する

設定例:

  • 動作:メッセージの遅延
  • 遅延の種類:指定した時間遅延
  • 時間:30 秒

例2:APIリクエストを1秒に1件へ制限する

外部APIへ短時間に大量リクエストを送らないようにする例です。

例2:APIリクエストを1秒に1件へ制限する

設定例:

  • 動作:メッセージの流量制限
  • 対象:全てのメッセージ
  • 流量:1 メッセージ / 1 秒
  • 超過時の扱い:中間メッセージをキューに追加

この構成にすると、複数のメッセージが流れてきても、1秒に1件ずつ後続へ渡せます。

例3:通知を1分に1件ずつ送信する

アラートが大量に発生した場合でも、通知を一定間隔に抑える例です。

例3:通知を1分に1件ずつ送信する

設定例:

  • 動作:メッセージの流量制限
  • 対象:全てのメッセージ
  • 流量:1 メッセージ / 1 分
  • 超過時の扱い:中間メッセージをキューに追加

通知先に大量のメールが連続で届くことを防ぎたい場合に利用できます。

例4:メッセージごとに待ち時間を変える

前段のfunctionノードで待ち時間を設定し、delayノード(遅延の種類:msg.delay に遅延を設定)でその時間だけ待たせる例です。

例4:メッセージごとに待ち時間を変える

msg.delay = 10000;
return msg;

この場合、10,000ミリ秒、つまり10秒待ってから後続へ渡します。 メッセージごとに待ち時間を変えたい場合に利用できます。

注意点

待機中のメッセージに注意する

delayノードでメッセージを待たせている間、そのメッセージは後続ノードへまだ渡されていません。 大量のメッセージを長時間待たせる設定にすると、待機中のメッセージが増える可能性があります。

流量制限ではキューが溜まる場合がある

流量制限で「中間メッセージをキューに追加」を選択している場合、入力されるメッセージ数が送信できる数を上回ると、キューが溜まります。 例えば、1秒に10件入ってくるのに、1分に1件しか送信しない設定にすると、後続処理まで大きな遅延が発生します。

msg.delay の単位に注意する

msg.delay の値の単位はミリ秒です。 例えば、30秒待たせたい場合は、以下のように設定します。

msg.delay = 30000;

また、msg.delay が使われるのは、遅延の種類が「msg.delay に遅延を設定」の場合のみです。

通知や外部API連携では間隔を考慮する

メール送信、チャット通知、外部API連携などにdelayノードを使う場合は、送信先の制限や運用上の見やすさを考慮して間隔を設定してください。 短すぎると通知が連続し、長すぎると対応が遅れる可能性があります。

関連ノード

  • injectノード:定期的に処理を起動する場合に使用します。
  • http requestノード:delayノードで間隔を空けて外部APIへリクエストする場合に使用します。
  • switchノード:条件に応じてdelayノードへ流すかどうかを分岐する場合に使用します。
  • changeノード:msg.delay、msg.reset、msg.flush などを設定する場合に使用します。
  • functionノード:メッセージごとに遅延時間やレートを動的に設定する場合に使用します。
  • メール送信ノード:通知を一定間隔に抑えて送信する場合に使用します。
  • debugノード:delayノードの前後でメッセージの流れを確認する場合に使用します。

まとめ

delayノードは、メッセージを一定時間待たせたり、一定時間あたりに流すメッセージ数を制限したりするためのノードです。

指定した時間遅延、ランダム時間の遅延、msg.delay による遅延、メッセージの流量制限などを用途に応じて選択できます。

運用自動化では、再起動後の待機、WebサイトやAPIの再確認、通知の連続送信防止、外部APIへのアクセス制御などで活用できます。

一方で、待機中のメッセージやキューが溜まりすぎると、後続処理が遅れたり、意図しない動作につながる場合があります。

利用時は、待機時間、流量制限、超過時の扱い、msg.reset や msg.flush の動作を確認したうえで設定してください。