はじめに
桜とともに入社迎えた新入社員のみなさんすこしは会社に慣れてきましたでしょうか?
花見イベントも終わり次のイベントはゴールデンウィークでしょうか。
早いですねー。
みなさん、こんにちは花よりたこ焼きが好きな製品開発部の大澤です。
前回、村田の記事で Amazon SQS を使った新しい連携活用例を紹介いたしました。
今回は実際に Amazon SQSにSalesforceからメッセージを送信し、
そのメッセージをSkyOnDemandのAmazon SQS アダプタでメッセージを取得するところまでをご紹介します。
①Amazon SQSのMessage Queueの作成
必要なクリック数はたったの3回です!
1)AWS マネジメントコンソールから Amazon SQSを選択します。
2)「Create New Queue」からキューを新規に作成します。
3) 「Queue Name」を入力して「Create Queue」で作成完了です。
※今回は東京リージョンで作成します。リージョンはAWS マネジメントコンソールの右上ののリストから変更可能です。
設定値は「Queue name」以外すべてデフォルト値を設定しています。
Queue Settings :キューの設定
Default Visibility Timeout | 他のクライアントから重複して取得されないようにするための期間を設定します。 |
Message Retention Period | メッセージの保存期間を設定します。 |
Maximam Message Size | メッセージの最大サイズを設定します。 |
Delivery Delay | キューに入ったメッセージを取得されるようなるまでの期間を設定します。 |
Receive Message Wait Time | キューからメッセージの取得期間(ロングポーリング)の設定します。 |
Dead Letter Queue Settings:Dead Letter Queueの設定
Use Redrive Policy | Dead Letter Queueを使用するかを設定します。 |
Dead Letter Queue | Dead Letter Queue用のキューの名前を設定します。 |
Maximum Receives | メッセージの最大受信数を設定します。 |
作成したらさきほどの一覧画面で確認してみます。
②SalesforceからAmazon SQSへメッセージを送信
今回はApexからHTTPでSQSにメッセージを送信する方法を紹介します。
そしてsendMessageメソッドにてメッセージを送信します。
public virtual without sharing class AwsSqsClient extends AWSClient { public AwsSqsClient() { this.aas = new AWSAccessSettings(); this.aas.accessKeyId = 'XXXXXXXXXXXX';//アクセスキー this.aas.secretAccessKey = 'YYYYYYYYYYYY';//シークレットアクセスキー this.aas.region = 'ap-northeast-1'; //キューのエンドポイント this.aas.endPath = '/123456789/message-queue';//キューのパスを this.aas.serviceName = 'sqs';//サービス名 this.aas.apiVersion = '2012-11-05';//APIバージョン this.aas.method = 'GET';//HTTP メソッド 今回はGETで行ないます。 } public AWSAccessResult sendMessage(String message) { //2バイトのメッセージにも対応するためURLエンコードを行ないます。 String encodeMessage = EncodingUtil.urlEncode(message,'UTF-8').replace('+', '%20').replace('*', '%2A').replace('%7E','~'); //メッセージ送信のため'SendMessage'と指定します。 return this.send(this.createHttpRequest(encodeMessage,'SendMessage')); } }
次は作成したApexクラスを実行してみましょう。
String message = 'Salesforceからのメッセージです!'; AwsSqsClient sqsclient = new AwsSqsClient(); sqsclient.SendMessage(message);
③SkyOnDemandでSalesforceからSQSに送信されたメッセージを取得
いよいよSkyOnDemandでAmazon SQSアダプタを使用してメッセージを取得します。
1)Amazon SQSへ接続するためのグローバルリソースを作成します。
グローバルリソースの設定
Access Key ID | アクセスキーを設定します。 |
Secret Access Key | シークレットアクセスキーを設定します。 |
リージョン | リージョンを設定します。 |
接続タイムアウト(秒) | 接続時のタイムアウトを設定します。 |
ソケットタイムアウト(秒) | 接続時のソケットタイムアウトを設定します。 |
2)AmazonSQS のメッセージを受信するスクリプトを作成
ツールパレットからAmazon SQSアダプタを選択します。1 | メッセージ受信 | キューのメッセージを受信します。 |
2 | メッセージ送信 | キューにメッセージを送信します。 |
3 | メッセージ削除 | キューに入っているメッセージをメッセージIDをキーに削除します。 |
SQS メッセージ受信 アダプタの設定
タブ[必須設定]
接続先 | Amazon SQSのグローバルリソースを選択します。 |
キュー名 | メッセージを受信するキュー名を設定します。 |
タブ[オプション]
受信メッセージの最大数
|
一度に受信するメッセージを設定します。
※未入力の場合はキューの設定に準じます。
|
受信メッセージの可視タイムアウト
|
他のクライアント から重複して取得されないようにするための
期間を設定します。 ※未入力の場合はキューの設定に準じます。
|
変数代入アイコンの設定
SQS メッセージ受信の[message_body]を変数にマッピングします。
実行!!
結果のログをみてみましょう。
まとめ
Amazon SQSアダプタを使って簡単にメッセージを取得できましたね!
今回はSalesforceから直接メッセージを実行しましたが、例えば取引先にカスタムボタンを作成し、そのボタンを押すと取引先の住所がSQSにメッセージ送信され、SkyOnDemandでそのメッセージからピザ屋に注文されて
ピザが取引先に・・・そんな使い方はしないですねー(笑)
取引先のボタンを押すとSkyOnDemandで取引先の情報をレポーティングしてExcelファイルをメールにて知らせてくれるシステムが構築できます。
蛇足になりますがForce.comの開発はMavensMateがおすすめです!ご存知の方も多いと存じますが、非常に軽いForce.com IDEです。
次回の記事もご期待ください!!