プラットフォームイベントトリガーのバッチサイズを調整する
学習の目的
この単元を完了すると、次のことができるようになります。
- プラットフォームイベントトリガーのバッチサイズが小さい場合と大きい場合の長所と短所を挙げる。
- Tooling API を使用して PlatformEventSubscriberConfig でトリガーバッチサイズを設定する。
プラットフォームイベントトリガーのバッチサイズ
デフォルトでは、トリガーはトリガー呼び出しごとに最大 2,000 件のイベントメッセージを受信できるバッチサイズになっています。このバッチサイズは、200 である通常の Apex オブジェクトトリガーのバッチサイズより大きくなっています。バッチサイズが大きいことで、プラットフォームイベントトリガーを拡張しやすくなり、大量のイベントをより速く処理できます。バッチサイズが大きいことによる副作用の 1 つは、特にトリガーが DML 操作や SOQL 操作を実行する場合に、Apex ガバナ制限に達する可能性が高くなることです。この場合は、バッチサイズを小さく設定することで、Apex ガバナ制限に達するのを避けやすくなります。
setResumeCheckpoint を使用すると、制限例外が発生した後にトリガーを再開できますが、トリガーバッチサイズを制限して制限例外自体を避けることも 1 つの方法です。
選択するトリガーバッチサイズ
トリガーバッチサイズは、イベントの公開レートによって決まります。トリガーバッチサイズを小さくすると、イベント処理が遅くなる場合があります。トリガーが大量のイベントを受信する場合、バッチサイズが小さいとイベント処理が追い付かず、受信イベントのキューが大きくなることがあります。
イベントはイベントバスに 72 時間保存されるため、バッチサイズが小さいことでトリガーの実行が遅くなると、保存されたイベントを場合によっては利用できなくなることがあります。小さすぎるバッチサイズを使用したり、バッチサイズを 1 に設定したりすることはお勧めしません。設定するバッチサイズを決めるときは、イベント量と、トリガーでのイベント処理速度を考慮してください。トリガーが Apex ガバナ制限に頻繁に達する場合には、トリガーバッチサイズを小さくして制限に達しないようにすることも効果的です。
バッチサイズを設定する
デフォルトのバッチサイズを上書きするには、Tooling API または Metadata API の PlatformEventSubscriberConfig を使用します。この例では、Postman を使用して Tooling API 要求を実行し、OrderEventTrigger のバッチサイズを 100 に設定します。
Postman に Trailhead Playground 組織を接続する
- Trailhead Playground 組織にログインしていることを確認してください。
- 「Quick Start: Connect Postman to Salesforce (クイックスタート: Postman を Salesforce に接続する)」プロジェクトを完了して Postman を設定したら、Postman アプリケーションを開き、ワークスペースを選択して、Salesforce API コレクションの自分のフォークに移動します。
- [Authorization (認証)] タブで、最下部までスクロールして [Get New Access Token (新しいアクセストークンを取得)] をクリックします。
- [許可] をクリックします。
- [Manage Access Tokens (アクセストークンを管理)] ダイアログで、インスタンス URL をクリップボードにコピーします。
- [Use Token (トークンを使用)] をクリックします。
- [Variables (変数)] タブの _endpoint 行で、[VALUE] 列に先ほどコピーしたインスタンス URL を貼り付けます。
- 接続が機能していることをテストします。
- [Collections (コレクション)] で、Salesforce Platform API コレクションのフォークを選択します。
- [REST] を選択して、REST APIs を展開します。
- [GET Limits] を選択して、[Send (送信)] をクリックします。
- 応答ウィンドウの [Status (状況)] 項目に [Status: 200 OK] と表示されるはずです。表示されない場合は、ステップを繰り返して新しいトークンを取得します。
Tooling API コールを実行してトリガーバッチサイズを設定する
トリガー設定を作成する前に、トリガーの ID を取得する必要があります。トリガー ID は、SOQL クエリを実行して取得できます。
- Salesforce Platform APIs コレクションの自分のフォークで [Tooling] を展開し、[Tooling Query (Tooling クエリ)] をクリックします。
- [Params (パラメーター)] タブをクリックします。
- 前の単元のハンズオン Challenge で作成した
OrderShippingEventTriggerの ID を取得します。[Query Params (クエリパラメーター)] の q に、SELECT Id FROM ApexTrigger WHERE Name='OrderShippingEventTrigger'というクエリを入力します。 - [Send (送信)] をクリックします。
- レスポンスにはトリガー ID が含まれます。次の手順で使用するために、その ID をコピーします。
{
"size": 1,
"totalSize": 1,
"done": true,
"queryLocator": null,
"entityTypeName": "ApexTrigger",
"records": [
{
"attributes": {
"type": "ApexTrigger",
"url": "/services/data/v60.0/tooling/sobjects/ApexTrigger/01q8b0000002wXDAAY"
},
"Id": "01q8b0000002wXDAAY"
}
]
}- Salesforce Platform APIs コレクションの自分のフォークで [Tooling] を展開し、[Post Tooling SObject (Tooling SObject を送信)] をクリックします。
- [Params (パラメーター)] タブをクリックします。
- [Path Variables (パス変数)] の SOBJECT_API_NAME に、
PlatformEventSubscriberConfigと入力します。 - [Body (本文)] をクリックして、[Raw (未加工)] と [JSON] のオプションが選択されていることを確認します。
- 本文を次の JSON 本文に置き換えます。
<Apex_Trigger_ID>プレースホルダーを、先ほどコピーしたトリガー ID に置き換えます。
{
"BatchSize": "100",
"DeveloperName":"OrderShippingEventTriggerConfig",
"MasterLabel":"OrderShippingEventTriggerConfig",
"PlatformEventConsumerId": "<Apex_Trigger_ID>"
}- [Send (送信)] をクリックします。
- 「
201 Created」(201 作成済み) というレスポンスが返されることを確認します。レスポンスは次の例のようになります。
{
"id": "3JK8b000000blKRGAY",
"success": true,
"errors": [],
"warnings": [],
"infos": []
}これで、トリガーは一度に 100 件のイベントを処理するバッチサイズに設定されました。
詳細は、『Tooling API 開発者ガイド』の「PlatformEventSubscriberConfig」または『Metadata API 開発者ガイド』の「PlatformEventSubscriberConfig」を参照してください。
詳細は、『プラットフォームイベント開発者ガイド』の「Configure the User and Batch Size for Your Platform Event Trigger with PlatformEventSubscriberConfig (PlatformEventSubscriberConfig を使用してプラットフォームイベントトリガーのユーザーとバッチサイズを設定する)」を参照してください。
お疲れ様でした。この単元では、プラットフォームイベントの公開とサブスクリプションをデバッグするためのさまざまな手法を学習しました。また、堅牢なプラットフォームイベントトリガーの記述方法と、トリガーバッチサイズを制御する方法も学習しました。これで、Apex でイベント駆動型アプリケーションを自信を持って記述できるだけの知識と手法が身に付きました。
リソース
- Metadata API 開発者ガイド: PlatformEventSubscriberConfig
- Tooling API 開発者ガイド: PlatformEventSubscriberConfig
- Apex 開発者ガイド: 実行ガバナと制限
- プラットフォームイベント開発者ガイド: Configure the User and Batch Size for Your Platform Event Trigger with PlatformEventSubscriberConfig (PlatformEventSubscriberConfig を使用してプラットフォームイベントトリガーのユーザーとバッチサイズを設定する)
- プラットフォームイベント開発者ガイド: View and Manage an Event’s Subscribers on the Platform Event’s Detail Page (プラットフォームイベントの詳細ページでイベントのサブスクライバーを表示および管理する)
