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件になっています。
