この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

メッセージの永続性

PushTopic イベント、汎用イベント、標準規模のイベントは 24 時間、大規模イベントは 72 時間それぞれ保存されます。大規模イベントには、プラットフォームイベントや変更データキャプチャイベントなどがあります。標準規模のイベントは、今後使用できなくなります。また、標準規模のイベントで取得できるのは Spring ’19 以前に定義されたイベントのみです。API バージョン 37.0 以降では、デュラブルストリーミングを通じて保持期間内のイベントを取得できます。
保持期間が過ぎると、イベントがイベントバスから消去されます。消去の処理は後から開始されることもあり、その結果、72 時間を超えるプラットフォームイベントや変更データキャプチャイベントが、利用可能のままになることがあります。Salesforce では、72 時間の保存期間を超えたイベントの保存については保証いたしかねます。

イベントバス

API バージョン 37.0 以降では、イベントはイベントバスに公開されます。登録者は、イベントバスのチャネルからイベント (一時的に保存されている過去のイベントを含む) を取得します。イベントバスは、イベント公開者とイベント登録者を分離します。

Salesforce イベントバス

イベントの再実行プロセス

各イベントメッセージに、ReplayId 項目に含まれる不透明 ID が割り当てられます。ReplayId 項目値は、イベントが登録者に配信されるときにシステムによって入力され、イベントストリーム内のイベントの位置を参照します。連続するイベントに対して再生 ID の値に連番が振られるという保証はありません。登録者は再実行 ID の値を保存し、再登録時にその値を使用して、保持ウィンドウ内のイベントを取得できます。たとえば、登録者は、接続に失敗した後、欠落したイベントを取得できます。ただし、登録者は、保存した再実行 ID に基づいて新しい再実行 ID を計算し、システム内の他のイベントを参照することはできません。

プラットフォームイベントメッセージを一意に識別するには、ReplayId 項目ではなく、EventUuid システム項目を使用します。ReplayId 項目は、Salesforce のメンテナンス活動 (組織の移行など) が行われると、一意でなくなる可能性があります。EventUuid 項目の値は常に一意です。

次の例は、replayId 項目を含むイベントメッセージの内容を示しています。例の replayId 項目には数字が含まれていますが、それらは不明確な項目です。これらの値が、常に数値を含むと仮定しないことをお勧めします。replayId の値はバイト型で保存するのが最良の方法です。

CometD クライアントに配信されるときに、プラットフォームイベントメッセージに再実行 ID が含まれます。次の JSON メッセージは Low_Ink__e プラットフォームイベントのイベントオブジェクトの replayId 項目を示します。

1{
2  "data": {
3    "schema": "dffQ2QLzDNHqwB8_sHMxdA", 
4    "payload": {
5      "CreatedDate": "2023-04-09T18:31:40.517Z", 
6      "CreatedById": "005D0000001cSZs", 
7      "Printer_Model__c": "XZO-5", 
8      "Serial_Number__c": "12345", 
9      "Ink_Percentage__c": 0.2
10    }, 
11    "event": {
12      "EventUuid": "2ec0e371-1395-457f-9275-be1b527a72f7",
13      "replayId": 2112
14    }
15  }, 
16  "channel": "/event/Low_Ink__e"
17}

次の JSON メッセージは変更データキャプチャイベントのイベントオブジェクトの replayId 項目を示します。

1{
2  "data": {
3    "schema": "IeRuaY6cbI_HsV8Rv1Mc5g", 
4    "payload": {
5      "ChangeEventHeader": {
6        "entityName": "Account", 
7        "recordIds": [
8          "<record_ID>"
9        ], 
10        "changeType": "CREATE", 
11        "changeOrigin": "com.salesforce.core", 
12        "transactionKey": "001b7375-0086-250e-e6ca-b99bc3a8b69f", 
13        "sequenceNumber": 1, 
14        "isTransactionEnd": true, 
15        "commitTimestamp": 1501010206653, 
16        "commitNumber": 92847272780, 
17        "commitUser": "<User_ID>"
18      }, 
19      "Name": "Acme", 
20      "Description": "Everyone is talking about the cloud. But what does it mean?", 
21      "OwnerId": "<Owner_ID>", 
22      "CreatedDate": "2017-07-25T19:16:44Z", 
23      "CreatedById": "<User_ID>", 
24      "LastModifiedDate": "2017-07-25T19:16:44Z", 
25      "LastModifiedById": "<User_ID>"
26    }, 
27    "event": {
28      "replayId": 6421
29    }
30  }, 
31  "channel": "/data/ChangeEvents"
32}

イベントの再実行

登録者は、保管期間内や特定のイベント後のすべてのイベントなど、受信するイベントを選択できます。デフォルトでは、登録後に送信された新規イベントのみを受信します。イベントは保管期間を過ぎると破棄されます。

次の概要図は、イベントコンシューマーがさまざまな再実行オプションを使用してイベントのストリームを読み取る方法を示しています。

再実行オプションを使用したイベントのストリームを示す図
表 1. 再実行オプション
再実行オプション 説明 使用方法
再実行 ID 登録者は、replayId 値で指定されたイベント後の保存されているイベントすべてと新規イベントを受信します。 接続障害後などに、特定のイベントメッセージより後の欠落したイベントを取り戻すことができます。特定の再実行 ID で登録するには、どこから保存されたイベントを取得するかに応じて、その直前のイベントメッセージの再実行 ID を保存します。再登録するときにこの再実行 ID を使用します。
-1 (再実行オプションが指定されていない場合のデフォルト。)登録者は、クライアントの登録後にブロードキャストされた新規イベントを受信します。 –1 オプションで登録して新規イベントメッセージを取得することをお勧めします。以前のイベントメッセージを取得するには、以前に保存した特定の再実行 ID を使用することをお勧めします。
-2 登録者は、すべてのイベントを受信します。これには、保管期間内の過去のイベントと新規イベントが含まれます。 接続障害後などの場合、欠落したイベントを取り戻し、保存されているすべてのイベントを取得できます。

このオプションは慎重に使用してください。大量のイベントメッセージが保存されている場合、-2 オプションで登録するとパフォーマンスが低下するおそれがあります。

重要

イベントを再実行するには、ストリーミング API エンドポイントを使用します。

1https://MyDomainName.my.salesforce.com/cometd/60.0/

ストリーミング API エンドポイントを使用する際には、次の重要な考慮事項に注意してください。

  • デュラブルストリーミングがサポートされるのは、クライアントが登録したストリーミング API エンドポイントで API バージョン 37.0 以降が使用されている場合です。PushTopic またはプラットフォームイベントのバージョンは、イベントメッセージで使用可能な項目にのみ影響を与えます。クライアント登録バージョンには影響を与えません。
  • インスタンス更新や組織の移行時に、継続性を確保するために、組織の [私のドメイン] のログイン URL はストリーミング API エンドポイントで使用することをお勧めします。

メモ

再実行メカニズムは、Salesforce が提供する CometD 拡張で実装されます。拡張の例は、JavaScript や Java で提供されます。たとえば、次のように JavaScript で拡張を登録できます。
1// Register streaming extension
2var replayExtension = new cometdReplayExtension();
3replayExtension.setChannel(<Streaming Channel to Subscribe to>);
4replayExtension.setReplay(<Event Replay Option>);
5cometd.registerExtension('myReplayExtensionName', replayExtension);
  • setReplay() に渡される引数は、再実行オプションのいずれかです。クライアントを –1 オプションで登録して新規イベントを取得するか、特定の再実行 ID で登録することをお勧めします。チャネルに多数のイベントメッセージが含まれる場合、–2 オプションで頻繁に登録すると、パフォーマンスの問題が発生する可能性があります。
  • registerExtension() に渡される最初の引数は、コードの再実行拡張の名前です。この例では myExtensionName に設定されていますが、任意の文字列にもできます。後で拡張を登録解除する場合は、この名前を使用します。
  • setReplay() 関数がコールされない場合、または CometD 拡張が登録されない場合、新規イベントのみが登録者に送信されます。これは –1 オプションと同じです。

メモ

拡張に対して setReplay() 関数をコールすると、その後で登録者が受信するイベントは setReplay() に渡された再実行値パラメーターに依存します。

40 秒以内に接続されなかったかネットワーク障害が発生したためにクライアントがタイムアウトすると、クライアントは新しいハンドシェイク要求と再接続を試みます。再実行拡張は最後の受信メッセージの再実行 ID を保存し、再登録するときにその ID を使用します。そのため、クライアントはタイムアウト後に送信されたメッセージのみを受信し、タイムアウト前に送信された重複メッセージは受信しません。

コードサンプル

Java のサンプル
CometD 拡張を使用する Java クライアントのサンプルについては、「例: Java クライアントを使用したイベントの登録と再実行 (EMP コネクタ)」を参照してください。
Lightning コンポーネントのサンプル
empApi コンポーネントを使用するサンプルについては、「例: Lightning コンポーネントを使用した登録とイベントの再実行」を参照してください。
Visualforce のサンプル
Visualforce と CometD 拡張を JavaScript で使用する例およびコードのウォークスルーについては、「例: Visualforce ページを使用した登録とイベントの再実行」を参照してください。