EventUuid 項目を使用したイベントメッセージの識別と照合
EventUuid 項目は、プラットフォームイベントメッセージを識別するユニバーサル一意識別子 (UUID) です。EventUuid 項目はシステムによって入力され、その値を上書きすることはできません。EventUuid 項目は、API バージョン 52.0 以降を使用して CometD クライアントで利用できます。API バージョンは、Apex トリガーを保存するときに使用したバージョン、または CometD 登録者エンドポイントに指定されたバージョンに一致します。EventUuid 項目は、イベントスキーマの一部ではありません。REST eventSchema リソースまたは describe コールの結果によって返されます。EventUuid 項目は���大規模プラットフォームイベントと標準量プラットフォームイベントで使用できます。
Pub/Sub API クライアントの場合、イベントの ID 項目にはイベント UUID 値が含まれています。EventUuid という項目名は存在しません。id 項目は、すべての Pub/Sub API クライアントに存在しますが、バージョン管理されておらず、上書きされる可能性があります。詳細は、『Pub/Sub API』ドキュメントの「PublishStream RPC Method (PublishStream RPC メソッド)」を参照してください。
Pub/Sub API 以外のすべての公開方法では、イベントが非同期で公開されます。すぐに返された SaveResult に含まれている成功の状況は、公開操作が Salesforce のキューに登録されたことを意味します。操作は、後でシステムリソースが使用可能になったときに実行されます。検証や制限のエラーなど、一部の失敗は SaveResult に返されますが、非同期エラーは返されません。まれに、キューに登録された公開操作がシステムエラーにより失敗し、イベントメッセージが配信されないことがあります。EventUuid 項目を使用して、キューに登録されたイベントメッセージのうちどれが公開に失敗したかを判断して再公開できます。
Pub/Sub API による公開は同期的に実行され、返される応答には最終的な公開の状況が含まれます。
公開されたイベントメッセージのイベント UUID の取得
公開されたイベントメッセージと受信されたイベントメッセージの UUID を比較する前に、まずは公開されたイベントメッセージの UUID を保存します。また、対応するイベント項目値も保存し、イベントを必要に応じて再公開できるようにします。
Salesforce API を使用してイベントを公開した場合、返された SaveResult のエラーの message 項目に UUID が含まれます。次の例には、REST API POST 要求を使用して挿入されたイベントの保存結果が含まれます。
1{
2 "id" : "e01xx0000000001AAA",
3 "success" : true,
4 "errors" : [ {
5 "statusCode" : "OPERATION_ENQUEUED",
6 "message" : "e981b488-81f3-4fcc-bd6f-f7033c9d7ac3",
7 "fields" : [ ]
8 } ]
9}Apex でイベントを公開した場合、EventBus.getOperationId(saveResult) メソッドをコールして UUID を取得できます。
この例では、Apex を使用してイベント公開コールから UUID を取得します。
前提条件: この例を実行する前に、Order Event (注文イベント) の表示ラベルが付いているプラットフォームイベントと、Text(10) 型の Order Number (注文番号) 項目および Checkbox 型の Has Shipped (発送済み) 項目を定義します。
1// Publish a high-volume event message
2Order_Event__e evt = new Order_Event__e(
3 Order_Number__c='17',
4 Has_Shipped__c = false);
5Database.SaveResult sr = EventBus.publish(evt);
6// Inspect immediate result
7if (sr.isSuccess() == true) {
8 System.debug('Successfully enqueued event for publishing.');
9 // Get the UUID that uniquely identifies this event publish
10 System.debug('UUID=' + EventBus.getOperationId(sr));
11} else {
12 for(Database.Error err : sr.getErrors()) {
13 System.debug('Error returned: ' +
14 err.getStatusCode() +
15 ' - ' +
16 err.getMessage());
17 }
18}
19
20// Debug message output:
21//|DEBUG|Successfully enqueued event for publishing.
22//|DEBUG|UUID=6ba5db7e-c27b-4a67-a3c5-cf425ffcaf53CometD クライアントで受信されたイベントメッセージからのイベント UUID の取得
CometD クライアントで受信されたイベントメッセージでは、次の JSON イベントの例に示すように、イベントのサブセクションの EventUuid 項目にイベント UUID が含まれています。
1{
2 "schema": "UIovjRagY-xEDIJ1Ehzafg",
3 "payload": {
4 "CreatedDate": "2021-03-04T18:31:40.517Z",
5 "CreatedById": "005RM00000231cZYAQ",
6 "Order_Number__c": "17",
7 "Has_Shipped__c": false
8 },
9 "event": {
10 "EventUuid": "e981b488-81f3-4fcc-bd6f-f7033c9d7ac3",
11 "replayId": 617
12 }
13}Pub/Sub API クライアントで受信されたイベントメッセージからのイベント UUID の取得
Pub/Sub API クライアントで受信されたイベントメッセージでは、イベントインスタンスの id 項目にイベント UUID 値が含まれています。たとえば、次のようにイベントインスタンスの id 項目にアクセスすることで、コード内の UUID 値を取得できます。
1event.id返される値は、次の例のような UUID です。
14c45a27a-5d86-47ed-881a-878b9a9c0dccApex トリガーを使用した受信イベントメッセージからのイベント UUID の取得
Apex トリガーでは、イベントオブジェクトの EventUuid 項目にアクセスすることによってイベント UUID を抽出します。
1trigger OrderEventTrigger on Order_Event__e (after insert) {
2 for(Order_Event__e evt: Trigger.New) {
3 // Get the event UUID
4 String EventUuid = evt.EventUuid;
5 System.debug('Received event UUID=' + EventUuid);
6
7 // Store the event UUID for matching with published event UUID
8 // . . .
9 }
10}
11
12// Debug message output:
13//|DEBUG|Received event UUID=6ba5db7e-c27b-4a67-a3c5-cf425ffcaf53公開されたイベントメッセージと受信されたイベントメッセージの UUID の照合
公開されたイベントメッセージと受信されたイベントメッセージの両方のイベント UUID を取得したら、それらの UUID を照合します。UUID が一致しない場合は、そのイベントが配信されていない可能性があります。一致しないイベントメッセージは再公開を試みることができます。