

 AWS SDK for .NET V3가 유지 관리 모드로 전환되었습니다.

[AWS SDK for .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)로 마이그레이션하는 것이 좋습니다. 마이그레이션 방법에 대한 자세한 내용과 정보는 [유지 관리 모드 공지](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)를 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon SQS 메시지 수신
<a name="ReceiveMessage"></a>

이 예제에서는를 사용하여 [프로그래밍 방식으로](CreateQueue.md) 또는 Amazon SQS [콘솔을 사용하여 생성할 수 있는 Amazon SQS ](https://console.aws.amazon.com/sqs)대기열에서 메시지를 AWS SDK for .NET 수신하는 방법을 보여줍니다. 애플리케이션은 대기열에서 단일 메시지를 읽고 메시지를 처리한 다음(이 경우 콘솔에 메시지 본문을 표시) 대기열에서 메시지를 삭제합니다. 애플리케이션은 사용자가 키보드로 키를 입력할 때까지 이 단계를 반복합니다.

이 예제와 [메시지 전송에 대한 이전 예제](SendMessage.md)를 함께 사용하여 Amazon SQS의 메시지 흐름을 확인할 수 있습니다.

다음 섹션에서는 이 예제의 코드 조각을 제공합니다. [예제의 전체 코드](#ReceiveMessage-complete-code)는 그 뒤에 표시되며, 그대로 빌드하고 실행할 수 있습니다.

**Topics**
+ [메시지 수신](#ReceiveMessage-receive)
+ [메시지 삭제](#ReceiveMessage-delete)
+ [전체 코드](#ReceiveMessage-complete-code)
+ [추가 고려 사항](#ReceiveMessage-additional)

## 메시지 수신
<a name="ReceiveMessage-receive"></a>

다음 코드 조각은 지정된 대기열 URL로 식별되는 대기열에서 메시지를 수신합니다.

[이 주제의 끝 부분에 있는](#ReceiveMessage-complete-code) 예제에서는 사용 중인 이 코드 조각을 보여줍니다.

```
    //
    // 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.)
      });
    }
```

## 메시지 삭제
<a name="ReceiveMessage-delete"></a>

다음 코드 조각은 지정된 대기열 URL로 식별되는 대기열에서 메시지를 삭제합니다.

[이 주제의 끝 부분에 있는](#ReceiveMessage-complete-code) 예제에서는 사용 중인 이 코드 조각을 보여줍니다.

```
    //
    // 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);
    }
```

## 전체 코드
<a name="ReceiveMessage-complete-code"></a>

이 섹션에는 이 예제에 대한 관련 참조와 전체 코드가 나와 있습니다.

### SDK 레퍼런스
<a name="w2aac19c15c25c25c21b5b1"></a>

NuGet 패키지:
+ [AWSSDK.SQS](https://www.nuget.org/packages/AWSSDK.SQS)

프로그래밍 요소:
+ 네임스페이스 [Amazon.SQS](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/NSQS.html)

  클래스 [AmazonSQSClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TSQSClient.html)
+ 네임스페이스 [Amazon.SQS.Model](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/NSQSModel.html)

  클래스 [ReceiveMessageRequest](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TReceiveMessageRequest.html)

  클래스 [ReceiveMessageResponse](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TReceiveMessageResponse.html)

### 코드
<a name="w2aac19c15c25c25c21b7b1"></a>

```
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);
    }
  }
}
```

## 추가 고려 사항
<a name="ReceiveMessage-additional"></a>
+ 긴 폴링을 지정하기 위해 이 예제에서는 `ReceiveMessageAsync` 메서드를 호출할 때마다 `WaitTimeSeconds` 속성을 사용합니다.

  대기열을 [생성](CreateQueue.md)하거나 [업데이트](UpdateSqsQueue.md)할 때 `ReceiveMessageWaitTimeSeconds` 속성을 사용하여 대기열의 모든 메시지에 대해 긴 폴링을 지정할 수도 있습니다.

  짧은 폴링과 긴 폴링에 대한 자세한 내용은 *Amazon Simple Queue Service 개발자 안내서*의 [짧은 폴링 및 긴 폴링](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html)을 참조하세요.
+ 메시지 처리 중에 수신 핸들을 사용하여 메시지 제한 시간 초과를 변경할 수 있습니다. 이를 수행하는 방법에 대한 자세한 내용은 [AmazonSQSClient](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TSQSClient.html) 클래스의 `ChangeMessageVisibilityAsync` 메서드를 참조하세요.
+ 조건 없이 `DeleteMessageAsync` 메서드를 호출하면 제한 시간 설정에 상관없이 대기열에서 메시지가 제거됩니다.