Amazon MWS サブスクリプションAPIとAmazon SQSの設定が完了し、アマゾンからキューにメッセージが来るようになりました。
さらに、Amazon AWS の認証情報(IAMユーザー)を作成したので、Amazon SQSからメッセージを取得する準備は整いました。
ということで、Amazon SQSからメッセージを取得するサンプルアプリをVisual Studio 2017 VB.netで作成してみます。
まずは、「AWS_SQS_Test」というWindowsフォームアプリを作成します。
こちらのページによると、Nugetでインストールするとよいそうです。
「Nugetでインストール」をクリックします。
nuget.orgで「Tags:"aws-sdk-v3"」を検索した結果が表示されました。
「AWSSDK - Amazon Simple Queue Service」と書いてあるのでクリックしてみました。
パッケージマネージャーコンソールで「Install-Package AWSSDK.SQS 」を実行すれば良いということみたいです。
ツール>Nuget パッケージマネージャー>パッケージマネージャーコンソール
を開きます。
「Install-Package AWSSDK.SQS」と入力して、Enterキーを押してみました。
参照に「AWSSDK.Core」と「AWSSDK.SQS」が追加されました。
Amazon SQSの操作には、「AWSSDK.SQS」が必要で、「AWSSDK.SQS」を使うためには「AWSSDK.Core」が必要だということなのでしょう。
Formには、次のようにコントロールを配置しました。
(SplitContainer1で上下に、フォームを分けて、上に「メッセージ受信 」ボタン(btnメッセージ受信)、下にはRichTextBox(rtxtMessage)を配置。)
「btnメッセージ受信」をクリックすると、「rtxtMessage」に取得したメッセージが表示されます。
メッセージは、「btnメッセージ受信」を一度クリックするごとに、1つずつ受信されます。
受信したメッセージは、Amazon SQS側で削除するようにしました。
実際には、
メッセージを受信
↓
メッセージを処理
↓
メッセージを削除
という流れになりますが、テストなので、「メッセージを処理」の部分はありません。
コードは次のようになります。
VB.netでAmazon SQSからメッセージを取得するコード
Imports Amazon Imports Amazon.Runtime Imports Amazon.SQS Imports Amazon.SQS.Model Public Class Form1 Private Sub btnメッセージ受信_Click(sender As Object, e As EventArgs) Handles btnメッセージ受信.Click Dim sqsConfig As New AmazonSQSConfig Dim sqsClient As AmazonSQSClient Dim sAccessKeyID As String = "[アクセスキーID]" Dim sSecretKey As String = "[シークレットアクセスキー]" '「us-west-2」の部分はリージョンによって変わります。 'オレゴンでSQSキューを作ったので、ServiceURLは以下のようになります。。 sqsConfig.ServiceURL = "http://sqs.us-west-2.amazonaws.com" 'Amazon SQS クライアントを作成 sqsClient = New AmazonSQSClient(New BasicAWSCredentials(sAccessKeyID, sSecretKey), sqsConfig) Dim receiveMessageRequest As New ReceiveMessageRequest() 'ここで、SQSキューのURLを指定します。 receiveMessageRequest.QueueUrl = "[SQSキューのURL]" Dim receiveMessageResponse As ReceiveMessageResponse 'メッセージを受信します。 receiveMessageResponse = sqsClient.ReceiveMessage(receiveMessageRequest) Dim messageRecieptHandle As String For Each Message In receiveMessageResponse.Messages '受信したメッセージをRichTextBoxに表示するようにしました。 rtxtMessage.Text = Message.Body 'ここで、何らかの処理を行って、完了したら、メッセージを削除します。 messageRecieptHandle = Message.ReceiptHandle sqsClient.DeleteMessage(New DeleteMessageRequest(receiveMessageRequest.QueueUrl, messageRecieptHandle)) Next End Sub End Class
わかりやすくするために、認証情報(アクセスキーIDとシークレットアクセスキー)をコード内に、直接書くやりかたにしてありますが、実際には別の方法で管理した方が良いです。
現在、キューに635件のメッセージがたまっています。
サンプルアプリを起動してみました。
「btnメッセージ受信」をクリックしたら、メッセージが下に表示されます。
同時に、このメッセージは削除されました。
AWSのコンソールで確認すると、メッセージが1件削除されて、634件になっています。