Apex トリガでのより小さなバッチのプラットフォームイベントメッセージの処理
処理するイベントメッセージ数が少ないほど、トリガは Apex ガバナ制限に達する可能性が低くなります。プラットフォームイベントトリガの最大バッチサイズは 2,000 で、Apex オブジェクトトリガの最大バッチサイズは 200 です。そのため、プラットフォームイベントトリガは制限に達する可能性がより高く、この機能によるメリットがあります。
トリガ再開のチェックポイントを設定するには、最後に正常に処理されたイベントメッセージの再実行 ID をこのメソッドのコールを使用して設定します。
トリガの実行フローが意図的に、または未処理��例外 (制限の例外など) によって停止すると、新しいバッチ (Trigger.New の sObject リスト) を使用して、トリガがもう一度起動します。新��いバッチは、設定した再実行 ID の後のイベントメッセージから開始します。setResumeCheckpoint(replayId) メソッドによってトリガ実行は停止しませんが、明示的に実行を終了することができます。たとえば、バッチサイズを制御するには、一部のイベントメッセージが処理されたら実行フローを終了するようにします。
この方法では、指定された再実行 ID が有効でない場合、EventBus.InvalidReplayIdException が発生します。再実行 ID は、Trigger.new リストのイベントの現在のトリガバッチにありません。
例
このトリガ例では、各反復の最後に処理されたイベントメッセージの再実行 ID を設定します。制限の例外が発生すると、トリガがもう一度起動し、設定された再実行 ID の後のイベントメッセージから処理が再開されます。
例
この例では、プラットフォームイベントトリガのバッチサイズを制御し、Apex オブジェクトトリガのバッチサイズ 200 に一致させます。このトリガは、すでに処理済みのイベントメッセージの数をカウントします。setResumeCheckpoint(replayId) は、正常に処理された各イベントメッセージの後でループの各反復でコールされます。イベント数が 200 件を超えるとループが終了し、トリガの実行が停止されます。未処理のイベントメッセージがある場合、トリガは再度起動します。新しいトリガ呼び出しに送信されたイベントメッセージのリストは、設定された再実行 ID のイベントメッセージの後のイベントメッセージで開始されます。
TestBatchSizeTriggerResumption テストクラスには ControlBatchSizeTrigger のテストが含まれます。クラスのテストメソッドは 201 件のイベントメッセージを公開します。次に、deliver() メソッドを 2 回コールしてトリガを 2 回起動します。最初の呼び出しは、200 件のイベントメッセージを処理します。2 番目の呼び出しは、最後のイベントメッセージを処理します。このテストでは、最後に処理されたイベントメッセージの再実行 ID を保持する EventBusSubscriber.Position プロパティを調査してトリガが呼び出されたことを検証します。