翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQSメッセージの受信
この例では、 を使用して Amazon SQSキューからメッセージ AWS SDK for .NET を受信する方法を示します。このキューは、プログラムで作成することも、Amazon SQSコンソール
この例とメッセージの送信に関する前の例は、Amazon のメッセージフローを表示するために一緒に使用できますSQS。
以下のセクションでは、この例のスニペットを確認できます。その下には、この例のコードの全文が示されており、そのままビルドして実行できます。
メッセージの受信
次のスニペットは、指定されたキュー によって識別されたキューからメッセージを受信しますURL。
このトピックの最後で、スニペットが実際に使用されている例を確認できます。
// // Method to read a message from the given queue // In this example, it gets one message at a time private static async Task<ReceiveMessageResponse> GetMessage( IAmazonSQS sqsClient, string qUrl, int waitTime=0) { return await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest{ QueueUrl=qUrl, MaxNumberOfMessages=MaxMessages, WaitTimeSeconds=waitTime // (Could also request attributes, set visibility timeout, etc.) }); }
メッセージの削除
次のスニペットは、指定されたキュー によって識別されたキューからメッセージを削除しますURL。
このトピックの最後 で、スニペットが実際に使用されている例を確認できます。
// // Method to delete a message from a queue private static async Task DeleteMessage( IAmazonSQS sqsClient, Message message, string qUrl) { Console.WriteLine($"\nDeleting message {message.MessageId} from queue..."); await sqsClient.DeleteMessageAsync(qUrl, message.ReceiptHandle); }
コード全文
このセクションでは、例に関連する参考資料とコードの全文を示します。
NuGet パッケージ:
プログラミング要素:
-
名前空間 Amazon。SQS
クラス AmazonSQSClient
-
名前空間 Amazon.SQS.モデル
using System; using System.Threading.Tasks; using Amazon.SQS; using Amazon.SQS.Model; namespace SQSReceiveMessages { class Program { private const int MaxMessages = 1; private const int WaitTime = 2; static async Task Main(string[] args) { // Do some checks on the command-line if(args.Length == 0) { Console.WriteLine("\nUsage: SQSReceiveMessages queue_url"); Console.WriteLine(" queue_url - The URL of an existing SQS queue."); return; } if(!args[0].StartsWith("https://sqs.")) { Console.WriteLine("\nThe command-line argument isn't a queue URL:"); Console.WriteLine($"{args[0]}"); return; } // Create the Amazon SQS client var sqsClient = new AmazonSQSClient(); // (could verify that the queue exists) // Read messages from the queue and perform appropriate actions Console.WriteLine($"Reading messages from queue\n {args[0]}"); Console.WriteLine("Press any key to stop. (Response might be slightly delayed.)"); do { var msg = await GetMessage(sqsClient, args[0], WaitTime); if(msg.Messages.Count != 0) { if(ProcessMessage(msg.Messages[0])) await DeleteMessage(sqsClient, msg.Messages[0], args[0]); } } while(!Console.KeyAvailable); } // // Method to read a message from the given queue // In this example, it gets one message at a time private static async Task<ReceiveMessageResponse> GetMessage( IAmazonSQS sqsClient, string qUrl, int waitTime=0) { return await sqsClient.ReceiveMessageAsync(new ReceiveMessageRequest{ QueueUrl=qUrl, MaxNumberOfMessages=MaxMessages, WaitTimeSeconds=waitTime // (Could also request attributes, set visibility timeout, etc.) }); } // // Method to process a message // In this example, it simply prints the message private static bool ProcessMessage(Message message) { Console.WriteLine($"\nMessage body of {message.MessageId}:"); Console.WriteLine($"{message.Body}"); return true; } // // Method to delete a message from a queue private static async Task DeleteMessage( IAmazonSQS sqsClient, Message message, string qUrl) { Console.WriteLine($"\nDeleting message {message.MessageId} from queue..."); await sqsClient.DeleteMessageAsync(qUrl, message.ReceiptHandle); } } }
追加の考慮事項
-
ロングポーリングを指定するために、この例では
ReceiveMessageAsync
メソッドへの各呼び出しでWaitTimeSeconds
プロパティを使用しています。キューの作成時または更新時に
ReceiveMessageWaitTimeSeconds
属性を使用して、キューのすべてのメッセージにロングポーリングを指定することもできます。ショートポーリングとロングポーリングの違いに関する詳細については、Amazon Simple Queue Service デベロッパーガイドの「ショートポーリングとロングポーリング」を参照してください。
-
メッセージの処理中に受信ハンドルを使用して、メッセージの可視性タイムアウトを変更できます。これを行う方法については、AmazonSQSClient クラスの
ChangeMessageVisibilityAsync
メソッドを参照してください。
-
DeleteMessageAsync
メソッドを無条件で呼び出すと、可視性タイムアウトの設定にかかわらず、メッセージがキューから削除されます。