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

イベントの再生プロセス
各イベントメッセージに、ReplayId 項目に含まれる不透明 ID が割り当てられます。ReplayId 項目値は、イベントが登録者に配信されるときにシステムによって入力され、イベントストリーム内のイベントの位置を参照します。連続するイベントに対して再生 ID の値に連番が振られるという保証はありません。たとえば、ID 999 のイベントの次のイベントの ID が 1,025 になることもあり得ます。登録者は再生 ID の値を保存し、再登録時にその値を使用して、保持ウィンドウ内のイベントを取得できます。たとえば、登録者は、接続に失敗した後、欠落したイベントを取得できます。ただし、登録者は、保存した再生 ID に基づいて新しい再生 ID を計算し、システム内の他のイベントを参照することはできません。
次の JSON メッセージは汎用イベントのイベントオブジェクトの replayId 項目を示します。
1{
2 "clientId":"a1ps4wpe52qytvcvbsko09tapc",
3 "data":{
4 "event":{
5 "createdDate":"2016-03-29T19:05:28.334Z",
6 "replayId":55
7 },
8 "payload":"This is a message."
9 },
10 "channel":"/u/TestStreaming"
11}次の JSON メッセージは PushTopic イベントのイベントオブジェクトの replayId 項目を示します。
1{
2 "clientId":"2t80j2hcog29sdh9ihjd9643a",
3 "data":{
4 "event":{
5 "createdDate":"2016-03-29T16:40:08.208Z",
6 "replayId":13,
7 "type":"created"
8 },
9 "sobject":{
10 "Website":null,
11 "Id":"001D000000KnaXjIAJ",
12 "Name":"TicTacToe"
13 }
14 },
15 "channel":"/topic/TestAccountStreaming"
16}CometD クライアントに配信されるときに、プラットフォームイベントメッセージに再生 ID が含まれます。次の JSON メッセージは Low_Ink__e プラットフォームイベントのイベントオブジェクトの replayId 項目を示します。
1{
2 "data": {
3 "schema": "dffQ2QLzDNHqwB8_sHMxdA",
4 "payload": {
5 "CreatedDate": "2017-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 "replayId": 2
13 }
14 },
15 "channel": "/event/Low_Ink__e"
16}次の 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": 6
29 }
30 },
31 "channel": "/data/ChangeEvents"
32}イベントの再生
登録者は、保管期間内や特定のイベント後のすべてのイベントなど、受信するイベントを選択できます。デフォルトでは、登録後に送信された新規イベントのみを受信します。イベントは保管期間を過ぎると破棄されます。
次の概要図は、イベントコンシューマがさまざまな再生オプションを使用してイベントのストリームを読み取る方法を示しています。
イベントを再生するには、ストリーミング API エンドポイントを使用します。
1http://<Salesforce_URL>/cometd/50.0/<Salesforce_URL> には、組織の [私のドメイン] のログイン URL、または組織のカスタムドメインのログイン URL を使用します。たとえば、MyDomainName.my.salesforce.com のようになります。[私のドメイン] またはカスタムドメインのいずれもリリースされていない場合は、インスタンス化された組織のログイン URL を使用します。たとえば、InstanceName.salesforce.com などです。
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() 関数をコールすると、その後で登録者が受信するイベントは setReplay() に渡された再生値パラメータに依存します。
40 秒以内に接続されなかったかネットワーク障害が発生したためにクライアントがタイムアウトすると、クライアントは新しいハンドシェイク要求と再接続を試みます。再生拡張は最後の受信メッセージの再生 ID を保存し、再登録するときにその ID を使用します。そのため、クライアントはタイムアウト後に送信されたメッセージのみを受信し、タイムアウト前に送信された重複メッセージは受信しません。
コードサンプル
- Visualforce のサンプル
- Visualforce と CometD 拡張を JavaScript で使用する例およびコードのウォークスルーについては、「例: Visualforce ページを使用した登録とイベントの再生」を参照してください。
- Java のサンプル
- CometD 拡張を使用する Java クライアントのサンプルについては、「例: Java クライアントを使用した登録とイベントの再生 (EMP コネクタ)」を参照してください。