Upload
shinichi-tomita
View
1.022
Download
0
Embed Size (px)
Citation preview
Streaming API で実現するクラウド ⇔ イントラ連携
株式会社マッシュマトリックス冨田 慎一
Streaming API
• サーバでの更新がリアルタイムにクライアントに通知される仕組み
• Spring ’12 からGA
• Bayeuxプロトコル
- JavaScript(dojo, faye),Java,Ruby,Pythonなどのライブラリが利用可能
何に使う?• Salesforceは、TwitterやFacebookほど更新が頻繁にはない
• Chatterでも10分に一度のポーリングで十分なレベル
• 1分1秒は争わないことに対して開発コストを掛けるか?
名前にだまされない
• “Streaming” はそんなに重要じゃない
• サーバ⇒クライアント “Push” が重要
Force.comでのその他の通知
• HTTPアウトバウンド系
- アウトバウンドメッセージ (ワークフロー)、HTTP Callout (Apex)
• 電子メール系- メールアラート(ワークフロー)、Outbound
Email (Apex)
• APIポーリング
Streaming API• Firewallの影響を受けない(× HTTPアウトバウンド)
➡ 通信はHTTPを利用、接続はクライアントから
• リアルタイムな通知(× 電子メール、APIポーリング)
• サーバリソースの利用負荷が低い(× APIポーリング)
構成
リソースサーバ
(Javascript, Java, Ruby, Python, etc...)Streaming Streaming
レスポンスリクエスト
リクエストクライアント
フロー• メッセージやり取り用のカスタムオブジェクトを作成
- リクエストメッセージとレスポンスメッセージを項目として持つ
• リクエスト側のTopicとリソース側のTopicを用意
• リクエストを送信する時はSオブジェクトに行を作成
• リソース側にリクエストメッセージが通知
• 同リクエストのレスポンスとしてSオブジェクトの行を更新
• リクエスト側にレスポンスメッセージが通知
Apexからの利用• ResponseListenerインターフェースを実装したオブジェクトを登録
- リクエストメッセージとともにオブジェクトもシリアライズされる
• レスポンス到着時にトリガ経由でオブジェクトのメソッドが呼び戻される
コード例public class LeadFaceCapture {
public static void startCapture(Id id) { SecureConnect.ResponseListener listener = new LeadFaceCaptureResponseListener(id); SecureConnect.request('capture', null, listener); } public class LeadFaceCaptureResponseListener implements SecureConnect.ResponseListener { Id id; public LeadFaceCaptureResponseListener(Id id) { this.id = id; } public void onResponse(String responseCode, String responseData) { if (responseCode == 'captureImage') { String data = (String) JSON.deserialize(responseData, String.class); Attachment attch = new Attachment(); attch.ParentId = this.id; attch.Name = 'Captured Image'; attch.Body = EncodingUtil.base64decode(data.substring(23)); insert attch; Lead lead = new Lead(Id=this.id); lead.CaptureImageId__c = attch.Id; update lead; } } public Type getClassType() { return LeadFaceCaptureResponseListener.class; } }}
Demo
利用例• レコード更新 ⇒ イントラ内のDBを検索しオンデマンドでアップデート(事前同期不要)
• モバイルから社内文書を検索・閲覧
• イントラ内DBとのマッシュアップ
Node-Salesforce
• Streaming APIにも対応した
Node.jsでのSalesforceクライアントライブラリ
• github.com/stomita/node-salesforce
おわり