実行多重度制限ノード¶
実行多重度を制限するためのノードです。 フローのうち、実行多重度を制限する区間を設定し、その区間内に指定した多重度よりも超過した数のメッセージが到達した場合に超過分をキューイングし待ち合わせます。
例えば、以下のようなフローがあり、何らかの理由で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
実行多重度制限区間の開始を示すノードです。 -
concurrency control 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件送信されるようにフローを作成してください。