実行多重度制限ノード

実行多重度を制限するためのノードです。 フローのうち、実行多重度を制限する区間を設定し、その区間内に指定した多重度よりも超過した数のメッセージが到達した場合に超過分をキューイングし待ち合わせます。

例えば、以下のようなフローがあり、何らかの理由でCriticalノードの実行多重度を制限したいとします。

--------     ----------    ------
|Source| --> |Critical|--> |Sink|
--------     ----------    ------

以下のようにconcurrency control inノード(図中"CC-in")とconcurrency control outノード(図中"CC-out")を配置することにより、Criticalノードの実行多重度をconcurrency control inノードに設定した値までに制限することができます。

--------     ---------     ----------      ------
|Source| --> | CC-in | --> |Critical| -+-> |Sink|
--------     ---------     ----------  |   ------
                  ^                    |
                  |                ---------
                  +----------------| CC-out|
                                   ---------

各ノードの設定項目等の詳細は後述のリファレンスを参照してください。

concurrency control in

実行多重度制限区間の開始ノードです。実行多重度上限を設定項目で指定します。

このノードは実行多重度制限区間の現在の実行多重度をカウントします。このノードにメッセージが到達する度に、現在の実行多重度が実行多重度上限未満であれば、現在の実行多重度を1つ増やし、後続のノードにメッセージを送ります。実行多重度上限以上であれば、そのメッセージをこのノード内でキューイングします。

concurrency control outノードからこのノードに特殊メッセージ(tickメッセージ)が来た時に現在の実行多重度を1つ減らします。その契機でキューにメッセージがあれば現在の実行多重度を1つ増やし、後続のノードにメッセージを送ります。

キューには長さがあり、ノードの設定項目で指定します。 キューの長さを0にすると多重度上限越えメッセージは即破棄されます。

キューが一杯のときにさらにメッセージが到達した際に、どのような動きをするかは設定項目で指定します。

設定項目

concurrency control inには以下の設定項目があります。

concurrency

実行多重度上限を指定します。

size

実行多重度上限を超えたメッセージを保持するキューの長さを指定します。0を指定するとメッセージをキューイングせず、すぐに捨てます。-1を指定するとキューのサイズは無制限になります。

mode

キューが一杯のときにさらにメッセージが来たときにどのように動くかという動作モードを指定します。flush: キューの古いメッセージをすべて捨てて、新しいメッセージをキューに入れます。reject: 新しいメッセージを捨てます。removeOldest: キューの中の最も古いメッセージを捨てて、新しいメッセージをキューに入れます。removeNewest: キューの中の最も新しいメッセージを捨てて、新しいメッセージをキューに入れます。

ログ出力

concurrency control inはNode-REDのログAPI経由で以下のログ出力を行います。

ログメッセージ レベル 説明
Current concurrency is current. There is something wrong...
現在の実行多重度が current です。フローに誤りがある可能性があります。
ERROR tickメッセージを受信したタイミングで、現在の実行多重度が0未満になっています。メッセージの入力よりもtickメッセージの方が多くなっていることが予想され、後続フローの組み方やロジックが誤っている可能性が高いです。
Queue is full. mode: mode
キューが一杯です。動作モード: mode
WARN 現在の実行多重度が上限に達した状態で、さらにメッセージを受信し、かつキュー内のメッセージも上限である場合です。この後mode設定に従ってメッセージの削除等が行われます。
Current concurrency reaches max, reject a message
現在の実行多重度が最大実行多重度 max に達しました。新しいメッセージをリジェクトします。
INFO 現在の実行多重度が上限に達した状態で、さらにメッセージを受信し、かつキューのサイズが0になっている場合です。新しいメッセージは即座に削除されます。

concurrency control out

実行多重度制限区間の終了ノードです。任意のメッセージを受信し、後続のノードに特殊メッセージ(tickメッセージ)を送信します。

tickメッセージは以下のフォーマットです。

{
    tick: true
}

注意事項

concurrency control inノードが1件メッセージを受け付けるたびに、後続のconcurrency control outノードは最終的に、確実にtickメッセージを1件、concurrency control inノードに送信する必要があります。ノードが分岐したり、エラーが発生した場合でも、tickメッセージが1件送信されるようにフローを作成してください。