4.12.2.2. スケジュールされたメッセージ
スケジュールされたメッセージがキューに送信されると、メッセージは通常のメッセージのようにキューの末尾に即座に追加されません。代わりに、ブローカーはスケジュールされたメッセージを中間バッファーに保持し、メッセージの詳細に従ってキューのヘッドへ配信するようにメッセージをスケジュールします。ただし、スケジュールされたメッセージはキューのメッセージ数に反映されます。再配信メッセージの場合のように、この動作により、ブローカーがリングキューのサイズを強制していないことを確認できます。たとえば、以下のシナリオについて考えてみましょう。
12:00 では、プロデューサーはメッセージ
A
をring-size="3"
で設定されたリングキューに送信します。メッセージは 12:05 に対してスケジュールされます。この時点で、
messageCount
=1
およびscheduledCount
=1
になります。12:01 では、プロデューサーはメッセージ
B
を同じリングキューに送信します。現在、
messageCount
=2
およびscheduledCount
=1
。12:02 では、プロデューサーはメッセージ
C
を同じリングキューに送信します。現在、
messageCount
=3
およびscheduledCount
=1
。12:03 時、プロデューサーはメッセージ
D
を同じリングキューに送信します。現在、
messageCount
=4
およびscheduledCount
=1
。キューのメッセージ数は
4
で、設定されたリングサイズから3
よりも大きい ようになりました。ただし、スケジュールされたメッセージはキューでは技術的ではありません (つまり、ブローカーにあり、キューに配置するようにスケジュールされています)。スケジュールされた配信時間 12:05 にすると、ブローカーはメッセージをキューのヘッドに配置します。ただし、リングキューが設定サイズをすでに到達しているため、スケジュールされたメッセージA
はすぐに削除されます。