プラットフォームイベントと変更データキャプチャの違いに関してメモ
(勉強中です。)
https://developer.salesforce.com/events/webinars/data-linkage-201908
プラットフォームや変更データキャプチャを使えば、
SFDCと外部システムの連携ができます。
<どんな機能を持っている?>
■変更データキャプチャ
・特定のDBに変更があった際に、検知
・イベントバスへチャネル作成
・購読/配信の仕組み
■プラットフォームイベント
・購読/配信の仕組み
ざっくり言うと、
変更データキャプチャ≒Trigger+プラットフォームイベントで実現可能。
(厳密には違う。)
※以下イメージ
■変更データキャプチャの機能
・特定のDBに変更があった際に、検知 →Triggerで代替
・イベントバスへチャネル作成 →Triggerで代替
・購読/配信の仕組み →プラットフォームイベント
例えば、
ユーザがSFDC画面からデータを入力し保存、
保存した結果、非同期通信で外部システムへ通知したい場合。
<前提>
まず外部システムは、イベントを購読する必要がある。
購読したシステムに対して、イベントを配信するため。
<処理の流れ>
ユーザがUI(LWCやVFなど)からデータを入力し、保存。
そのタイミングでApexのコントローラ側のメソッドが走り、DBに対してDML発行
それ(=DBの変更)を受けて、
ApexTriggerで検知し、Bus(=イベントバス)に対してイベントデータを生成することも可能。
イベントバスは、イベントの生成を受けて、
事前に購読した外部システムに対して、イベントを配信する。
留意事項
・大量データはBulkでやりましょう
・プラットフォームイベントは非同期のため、同期処理したい場合にはSOAP/RESTを選択しましょう。
・外部システムは、イベントを購読できる必要があります。
・同時接続システムや24hの配信数に制限あり。(ガバナ)
https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/platform_event_limits.htm
構築方法
・変更データキャプチャ
→設定から変更データキャプチャを検索し、対象オブジェクトを選定してSFDC側は完了
・プラットフォームイベント
→設定からプラットフォームイベントを検索し、イベントオブジェクト(__e)の作成が可能。イベントオブジェクトに対して項目追加やTriggerの構築が可能。
・Pub/Subモデルとは?(Publish=配信、Subscribe=購読)
事前に購読した人に向けて配信するモデルを指しており、何かソリューションを指しているわけでない。ただの概念。
LINEを思い浮かべるとわかりやすいかもなのだが、
グループチャットに100人いたとして、
誰かがチャットを投稿した際に、みんな受信/成功するまで待つ(=同期)場合に、
時間がものすごいかかったり、処理が重くなるかと思われる。
そういったときに、非同期の相手の受信を待たない通信が最適となる。
つまり、受取手にとって多少タイムラグがあるが、送ったら送りっぱなしとなる。
また、グループチャットに参加した人は購読すれば配信を受けられる点で、配信側に手が入らない。
システムでいうと、受信したいシステムが増える場合のスケーラビリティがある、と言える。
<PubSubモデル>
グループチャットを色んな人が購読する。(=グループチャットに参加する。)
誰かが発言すると、購読している人(=グループチャットに参加している人)に対して、配信する。(=チャットを送る。)
https://dev.appswingby.com/gcp/pub-sub%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%87%E3%83%AB%E3%80%9Ccloud-pub-sub%E3%82%92%E4%BE%8B%E3%81%AB%E3%80%9C/