このトピックでは、ApsaraMQ for RocketMQのスケジュールされたメッセージと遅延されたメッセージの用語、シナリオ、および使用方法について説明します。
用語
- スケジュールされたメッセージ: スケジュールされたメッセージは、ApsaraMQ for RocketMQブローカーによって指定された時点でコンシューマに配信されるメッセージです。
- 遅延メッセージ: 遅延メッセージは、ApsaraMQ for RocketMQブローカーによって指定された期間後にコンシューマに配信されるメッセージです。
スケジューリングメッセージと遅延メッセージの間にはコーディングの違いがあります。 ただし、スケジュールメッセージと遅延メッセージは同じ効果を達成します。 2つのタイプのメッセージがApsaraMQ for RocketMQブローカーに送信された後、メッセージはコンシューマに送信される前に特定の期間遅延されます。
シナリオ
スケジュールされたメッセージと遅延メッセージは、次のシナリオで使用できます。
- メッセージの作成と消費の間に時間ウィンドウが必要です。 たとえば、消費者が電子商取引で30分以内にタイムアウトする注文を作成すると、遅延メッセージがRabbitMQブローカーのmessage Queueにすぐに送信されます。 RabbitMQブローカーのMessage Queueは、30分後にメッセージをコンシューマーに配信します。 メッセージを受信すると、消費者は支払いが完了したかどうかを確認する必要があります。 支払いが完了していない場合、消費者は注文を閉じる。 支払いが完了すると、消費者はメッセージを無視する。
- メッセージを使用して、特定の時点でユーザーに通知を送信するなど、スケジュールされたタスクをトリガーします。
使用状況
スケジュールされたメッセージと遅延されたメッセージには、コードの点で次の違いがあります。
- スケジュールされたメッセージを送信する場合は、プロデューサがメッセージを送信する時点より後の時点を指定します。 ブローカーは、指定された時点でメッセージをコンシューマに送信します。
- 遅延メッセージを送信する場合は、プロデューサがメッセージを送信した時点から開始する期間を指定します。 ブローカーは、指定された期間が経過した後にメッセージを消費者に送信します。
スケジュール時間と遅延時間のルールを設定する
- スケジュールされたメッセージまたは遅延メッセージの
msg.setStartDeliverTime
パラメーターは、現在のタイムスタンプ以降の時点または期間に設定する必要があります。 単位:ミリ秒。 予定時刻が現在時刻よりも早い場合、メッセージは直ちに消費者に配信される。 - スケジュールされたメッセージまたは遅延メッセージの
msg.setStartDeliverTime
パラメーターは、40日以内の時点または期間に設定できます。 単位:ミリ秒。 指定された時点または期間が40日を超えると、メッセージを送信できません。
使用上の注意
メッセージタイプの整合性
トピックを使用して送信できるメッセージのタイプは、トピックの作成時に選択したメッセージタイプと同じである必要があります。 たとえば、ApsaraMQ for RocketMQコンソールでトピックを作成するときに、メッセージのタイプ パラメーターに 予定/遅延メッセージ を選択した場合などです。 トピックは、スケジュールされたメッセージと遅延メッセージのみを送信するために使用できます。
スケジュールされたメッセージと遅延メッセージの配信のレイテンシ
- スケジュールされたメッセージを配信すると、1〜2秒のレイテンシが発生する場合があります。
StartDeliverTime
パラメーターは、ApsaraMQ for RocketMQブローカーがコンシューマーにメッセージを送信し始める時刻を指定します。 累積メッセージが存在する場合、スケジュール済みメッセージまたは遅延メッセージは累積メッセージの後にキューに入れられ、指定された時間にコンシューマーに送信することはできません。- クライアントとブローカーとの間の潜在的な時間差のために、実際の配信時間は、クライアント上で指定された配信時間とは異なる場合がある。
- スケジュール済みメッセージと遅延済みメッセージは、ApsaraMQ for RocketMQブローカーで最大3日間保持できます。
たとえば、メッセージは5日以内に消費されるようにスケジュールされています。 メッセージが5日後に消費されない場合、メッセージは8日目に削除されます。
TCPサンプルコード
TCPプロトコルを使用してスケジュールメッセージと遅延メッセージを送信するためのサンプルコードについては、次のドキュメントを参照してください。
- Java
- スケジュールされたメッセージの送受信
- 遅延メッセージの送受信
- C ++: スケジュールされたメッセージの送受信
- . NET: スケジュールされたメッセージの送受信
HTTPサンプルコード
HTTPプロトコルを使用してスケジュールメッセージと遅延メッセージを送信するためのサンプルコードについては、次のドキュメントを参照してください。