.NET을 사용하여 Azure Queue Storage 시작Get started with Azure Queue storage using .NET

Azure Storage 코드 샘플 리포지토리 확인Check out the Azure Storage code samples repository

다운로드하고 실행할 수 있는 엔드투엔드 Azure Storage 코드 샘플을 쉽게 사용하려면 Azure Storage 샘플 목록을 확인하세요.For easy-to-use end-to-end Azure Storage code samples that you can download and run, please check out our list of Azure Storage Samples.

개요Overview

Azure Queue Storage는 응용 프로그램 구성 요소 간에 클라우드 메시징을 제공합니다.Azure Queue storage provides cloud messaging between application components. 규모를 고려하여 애플리케이션을 디자인할 때는 애플리케이션 구성 요소를 개별적으로 확장할 수 있도록 각 구성 요소를 분리하는 경우가 많습니다.In designing applications for scale, application components are often decoupled, so that they can scale independently. 큐 저장소는 클라우드, 데스크톱, 온-프레미스 서버 또는 모바일 디바이스에서 실행 중인지와 관계 없이 응용 프로그램 구성 요소 간에 통신을 위한 비동기 메시징을 제공합니다.Queue storage delivers asynchronous messaging for communication between application components, whether they are running in the cloud, on the desktop, on an on-premises server, or on a mobile device. Queue Storage는 또한 비동기 작업 관리와 프로세스 워크플로 작성을 지원합니다.Queue storage also supports managing asynchronous tasks and building process work flows.

이 자습서 정보About this tutorial

이 자습서에서는 Azure Queue Storage를 사용하여 몇 가지 일반적인 시나리오에 대한 .NET 코드를 작성하는 방법을 보여 줍니다.This tutorial shows how to write .NET code for some common scenarios using Azure Queue storage. 여기서 다루는 시나리오에는 큐 만들기 및 삭제, 큐 메시지 추가, 읽기 및 삭제가 포함됩니다.Scenarios covered include creating and deleting queues and adding, reading, and deleting queue messages.

예상 완료 시간: 45분Estimated time to complete: 45 minutes

필수 조건Prerequisites

Queue Storage 정의What is Queue Storage?

Azure Queue Storage는 HTTP 또는 HTTPS를 사용하여 인증된 호출을 통해 전 세계 어디에서나 액세스할 수 있는 다수의 메시지를 저장하기 위한 서비스입니다.Azure Queue storage is a service for storing large numbers of messages that can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. 단일 큐 메시지의 크기는 최대 64KB일 수 있으며, 하나의 큐에 저장소 계정의 총 용량 제한까지 수백만 개의 메시지가 포함될 수 있습니다.A single queue message can be up to 64 KB in size, and a queue can contain millions of messages, up to the total capacity limit of a storage account.

Queue Storage의 일반적인 사용은 다음과 같습니다.Common uses of Queue storage include:

  • 비동기적으로 처리할 작업 백로그 만들기Creating a backlog of work to process asynchronously
  • Azure 웹 역할에서 Azure 작업자 역할로 메시지 전달Passing messages from an Azure web role to an Azure worker role

큐 서비스 개념Queue Service Concepts

큐 서비스에는 다음 구성 요소가 포함됩니다.The Queue service contains the following components:

Queue1

  • URL 형식: 다음 URL 형식을 사용하여 큐에 주소를 지정할 수 있습니다.URL format: Queues are addressable using the following URL format:
    http://<storage account>.queue.core.windows.net/<queue>http://<storage account>.queue.core.windows.net/<queue>

    다음 URL은 다이어그램에 있는 큐의 주소를 지정합니다.The following URL addresses a queue in the diagram:

    http://myaccount.queue.core.windows.net/images-to-download

  • 스토리지 계정: Azure Storage에 대한 모든 액세스는 Storage 계정을 통해 수행됩니다.Storage Account: All access to Azure Storage is done through a storage account. Storage 계정 용량에 대한 자세한 내용은 Azure Storage 확장성 및 성능 목표 (영문)를 참조하십시오.See Azure Storage Scalability and Performance Targets for details about storage account capacity.

  • 큐: 큐에는 메시지 세트가 포함됩니다.Queue: A queue contains a set of messages. 모든 메시지는 큐에 있어야 합니다.All messages must be in a queue. 큐 이름은 모두 소문자여야 합니다.Note that the queue name must be all lowercase. 큐의 명명에 대한 자세한 내용은 큐 및 메타데이터 명명을 참조하세요.For information on naming queues, see Naming Queues and Metadata.

  • 메시지: 최대 64KB인 임의 형식의 메시지입니다.Message: A message, in any format, of up to 64 KB. 메시지가 큐에 남아 있을 수 있는 최대 시간은 7일입니다.The maximum time that a message can remain in the queue is 7 days.

Azure 저장소 계정 만들기Create an Azure storage account

첫 번째 Azure Storage 계정을 가장 쉽게 만드는 방법은 Azure Portal을 사용하는 것입니다.The easiest way to create your first Azure storage account is by using the Azure portal. 자세한 내용은 저장소 계정 만들기를 참조하십시오.To learn more, see Create a storage account.

또한 Azure PowerShell, Azure CLI 또는 .NET용 Azure Storage 리소스 공급자를 사용하여 Azure 스토리지 계정을 만들 수도 있습니다.You can also create an Azure storage account by using Azure PowerShell, Azure CLI, or the Azure Storage Resource Provider for .NET.

이 시점에서 스토리지 계정을 Azure에 만들지 않으려면 Azure 스토리지 에뮬레이터를 사용하여 로컬 환경에서 코드를 실행하고 테스트할 수도 있습니다.If you prefer not to create a storage account in Azure at this time, you can also use the Azure storage emulator to run and test your code in a local environment. 자세한 내용은 개발 및 테스트에 Azure Storage 에뮬레이터 사용을 참조하세요.For more information, see Use the Azure Storage Emulator for Development and Testing.

개발 환경 설정Set up your development environment

다음으로 이 가이드에 코드 예제를 사용할 준비가 되도록 Visual Studio에서 개발 환경을 설정합니다.Next, set up your development environment in Visual Studio so you're ready to try the code examples in this guide.

Windows 콘솔 애플리케이션 프로젝트 만들기Create a Windows console application project

Visual Studio에서 새로운 Windows 콘솔 애플리케이션을 만듭니다.In Visual Studio, create a new Windows console application. 다음 단계에서는 Visual Studio 2019에서 콘솔 애플리케이션을 만드는 방법을 보여 줍니다.The following steps show you how to create a console application in Visual Studio 2019. 이러한 단계는 다른 버전의 Visual Studio에서도 비슷합니다.The steps are similar in other versions of Visual Studio.

  1. 파일 > 새로 만들기 > 프로젝트를 선택합니다.Select File > New > Project
  2. 선택 플랫폼 > WindowsSelect Platform > Windows
  3. 콘솔 앱(.NET Framework) 를 선택합니다.Select Console App (.NET Framework)
  4. 다음을 선택합니다.Select Next
  5. 프로젝트 이름 필드에 응용 프로그램의 이름을 입력 합니다.In the Project name field, enter a name for your application
  6. 만들기Select Create

이 자습서의 모든 코드 예제에 추가할 수는 main () 콘솔 응용 프로그램의 메서드에 Program.cs 파일입니다.All code examples in this tutorial can be added to the Main() method of your console application's Program.cs file.

Azure 클라우드 서비스 또는 웹 앱을 포함 한.NET 응용 프로그램 및 데스크톱 및 모바일 응용 프로그램의 모든 형식에서 Azure Storage 클라이언트 라이브러리를 사용할 수 있습니다.You can use the Azure Storage client libraries in any type of .NET application, including an Azure cloud service or web app, and desktop and mobile applications. 이 가이드에서는 편의상 콘솔 애플리케이션을 사용합니다.In this guide, we use a console application for simplicity.

NuGet을 사용하여 필요한 패키지 설치Use NuGet to install the required packages

이 자습서를 완료 하기 위해 프로젝트에서 다음 세 가지 패키지를 참조 해야 합니다.You need to reference the following three packages in your project to complete this tutorial:

이러한 패키지를 얻습니다 NuGet을 사용할 수 있습니다.You can use NuGet to obtain these packages. 다음 단계를 수행하세요.Follow these steps:

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다.Right-click your project in Solution Explorer, and choose Manage NuGet Packages.
  2. 찾아보기를 선택합니다.Select Browse
  3. "Microsoft.Azure.Storage.Queue"에 대 한 온라인 검색 및 선택 설치 저장소 클라이언트 라이브러리 및 해당 종속성을 설치 합니다.Search online for "Microsoft.Azure.Storage.Queue", and select Install to install the Storage client library and its dependencies. 또한 큐 라이브러리의 종속성이는 Microsoft.Azure.Storage.Common 라이브러리를 설치 합니다.This will also install the Microsoft.Azure.Storage.Common library, which is a dependency of the queue library.
  4. "Microsoft.Azure.ConfigurationManager"에 대 한 온라인 검색 및 선택 설치 Azure 구성 관리자를 설치 합니다.Search online for "Microsoft.Azure.ConfigurationManager", and select Install to install the Azure Configuration Manager.

참고

저장소 클라이언트 라이브러리 패키지에도 포함 되어는 Azure SDK for.net합니다.The Storage client libraries packages are also included in the Azure SDK for .NET. 그러나 최신 버전 항상 있는지 확인 하는 NuGet에서 Storage 클라이언트 라이브러리도 설치 하는 것이 좋습니다.However, we recommend that you also install the Storage client libraries from NuGet to ensure that you always have the latest versions.

.NET 용 Storage 클라이언트 라이브러리의 ODataLib 종속성은 WCF Data Services 아니라 NuGet에서 사용 가능한 ODataLib 패키지에 의해 확인 됩니다.The ODataLib dependencies in the Storage client libraries for .NET are resolved by the ODataLib packages available on NuGet, not from WCF Data Services. ODataLib 라이브러리는 직접 다운로드하거나 NuGet을 통해 코드 프로젝트에서 참조할 수 있습니다.The ODataLib libraries can be downloaded directly, or referenced by your code project through NuGet. 저장소 클라이언트 라이브러리에서 사용 하는 특정 ODataLib 패키지는 ODataEdm, 및 공간입니다.The specific ODataLib packages used by the Storage client libraries are OData, Edm, and Spatial. 이러한 라이브러리는 Azure Table storage 클래스에서 사용 되지만, 이들은 저장소 클라이언트 라이브러리를 사용한 프로그래밍에 대 한 필수 종속성입니다.While these libraries are used by the Azure Table storage classes, they are required dependencies for programming with the Storage client libraries.

대상 환경 확인Determine your target environment

이 가이드의 예제를 실행하기 위해 다음과 같은 두 가지 환경 옵션이 있습니다.You have two environment options for running the examples in this guide:

  • 클라우드에서 Azure Storage 계정에 대한 코드를 실행할 수 있습니다.You can run your code against an Azure Storage account in the cloud.
  • Azure 저장소 에뮬레이터에 대해 코드를 실행할 수 있습니다.You can run your code against the Azure storage emulator. 스토리지 에뮬레이터는 클라우드에서 Azure Storage 계정을 에뮬레이트하는 로컬 환경입니다.The storage emulator is a local environment that emulates an Azure Storage account in the cloud. 에뮬레이터는 애플리케이션을 개발하는 동안 코드의 테스트 및 디버깅하기 위한 무료 옵션입니다.The emulator is a free option for testing and debugging your code while your application is under development. 에뮬레이터는 잘 알려진 계정 및 키를 사용합니다.The emulator uses a well-known account and key. 자세한 내용은 개발 및 테스트에 Azure Storage 에뮬레이터 사용을 참조하세요.For more information, see Use the Azure storage emulator for development and testing.

클라우드에서 저장소 계정을 대상으로 하는 경우 Azure Portal에서 저장소 계정에 대한 기본 선택키를 복사합니다.If you are targeting a storage account in the cloud, copy the primary access key for your storage account from the Azure portal. 자세한 내용은 액세스 키를 참조하세요.For more information, see Access keys.

참고

Azure Storage와 연결하여 비용이 초래되지 않도록 스토리지 에뮬레이터를 대상으로 할 수 있습니다.You can target the storage emulator to avoid incurring any costs associated with Azure Storage. 그러나 클라우드에서 Azure 저장소 계정을 대상으로 하도록 선택하는 경우 이 자습서를 수행하는 비용은 무시됩니다.However, if you do choose to target an Azure storage account in the cloud, costs for performing this tutorial will be negligible.

저장소 연결 문자열 구성Configure your storage connection string

저장소 연결 문자열을 사용 하 여 끝점 및 저장소 서비스에 액세스 하기 위한 자격 증명을 구성 하는.NET 지원에 대 한 Azure Storage 클라이언트 라이브러리입니다.The Azure Storage client libraries for .NET support using a storage connection string to configure endpoints and credentials for accessing storage services. 저장소 연결 문자열을 유지하는 가장 좋은 방법은 구성 파일 안에 있습니다.The best way to maintain your storage connection string is in a configuration file.

연결 문자열에 대한 자세한 내용은 Azure Storage에 연결 문자열 구성을 참조하세요.For more information about connection strings, see Configure a connection string to Azure Storage.

참고

저장소 계정 키는 저장소 계정의 루트 암호와 비슷합니다.Your storage account key is similar to the root password for your storage account. 항상 저장소 계정 키를 보호해야 합니다.Always be careful to protect your storage account key. 다른 사용자에게 배포하거나 하드 코딩하거나 다른 사람이 액세스할 수 있는 일반 텍스트 파일에 저장하지 마십시오.Avoid distributing it to other users, hard-coding it, or saving it in a plain-text file that is accessible to others. 손상되었다고 생각되면 Azure Portal을 사용하여 키를 다시 생성합니다.Regenerate your key by using the Azure portal if you believe it may have been compromised.

연결 문자열을 구성 하려면 엽니다는 app.config Visual Studio의 솔루션 탐색기에서 파일입니다.To configure your connection string, open the app.config file from Solution Explorer in Visual Studio. 내용을 추가 합니다 <appSettings> 요소 아래에 표시 합니다.Add the contents of the <appSettings> element shown below. 바꿉니다 계정 이름 저장소 계정 이름 및 계정 키 계정 액세스 키를 사용 하 여:Replace account-name with the name of your storage account, and account-key with your account access key:

<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <appSettings>
        <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key" />
    </appSettings>
</configuration>

예를 들어, 구성 설정은 다음과 유사하게 표시됩니다.For example, your configuration setting appears similar to:

<add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=storagesample;AccountKey=GMuzNHjlB3S9itqZJHHCnRkrokLkcSyW7yK9BRbGp0ENePunLPwBgpxV1Z/pVo9zpem/2xSHXkMqTHHLcx8XRA==" />

저장소 에뮬레이터를 대상으로 하려면 잘 알려진 계정 이름 및 키에 매핑되는 바로 가기를 사용할 수 있습니다. 이 경우에 연결 문자열 설정은 다음과 같습니다.In that case, your connection string setting is:

<add key="StorageConnectionString" value="UseDevelopmentStorage=true;" />

지시문을 사용하여 추가Add using directives

다음 using 지시문을 Program.cs 파일 맨 위에 추가합니다.Add the following using directives to the top of the Program.cs file:

using Microsoft.Azure; // Namespace for CloudConfigurationManager
using Microsoft.Azure.Storage; // Namespace for CloudStorageAccount
using Microsoft.Azure.Storage.Queue; // Namespace for Queue storage types

Azure Portal에서 자격 증명 복사Copy your credentials from the Azure portal

샘플 코드에서 저장소 계정에 대한 액세스 권한을 부여해야 합니다.The sample code needs to authorize access to your storage account. 권한을 부여하려면 연결 문자열 형태로 저장소 계정 자격 증명을 애플리케이션에 제공합니다.To authorize, you provide the application with your storage account credentials in the form of a connection string. 저장소 계정 자격 증명을 보려면:To view your storage account credentials:

  1. Azure Portal로 이동합니다.Navigate to the Azure portal.

  2. 저장소 계정을 찾습니다.Locate your storage account.

  3. 저장소 계정 개요의 설정 섹션에서 액세스 키를 선택합니다.In the Settings section of the storage account overview, select Access keys. 계정 액세스 키는 물론 각 키의 전체 연결 문자열이 나타납니다.Your account access keys appear, as well as the complete connection string for each key.

  4. key1 아래에서 연결 문자열 값을 찾고, 복사 단추를 클릭하여 연결 문자열을 복사합니다.Find the Connection string value under key1, and click the Copy button to copy the connection string. 다음 단계에서 연결 문자열 값을 환경 변수에 추가합니다.You will add the connection string value to an environment variable in the next step.

    Azure Portal에서 연결 문자열을 복사하는 방법을 보여주는 스크린샷

연결 문자열 구문 분석Parse the connection string

.NET용 Microsoft Azure 구성 관리자 라이브러리 는 구성 파일에서 연결 문자열을 구문 분석하기 위해 클래스를 제공합니다.The Microsoft Azure Configuration Manager Library for .NET provides a class for parsing a connection string from a configuration file. CloudConfigurationManager 클래스는 클라이언트 애플리케이션이 데스크톱, 모바일 장치, Azure 가상 머신 또는 Azure 클라우드 서비스 중 어디서 실행되는지에 관계없이 구성 설정을 구문 분석합니다.The CloudConfigurationManager class parses configuration settings regardless of whether the client application is running on the desktop, on a mobile device, in an Azure virtual machine, or in an Azure cloud service.

CloudConfigurationManager 패키지를 참조하려면 다음 using 지시문을 추가합니다.To reference the CloudConfigurationManager package, add the following using directive:

using Microsoft.Azure; //Namespace for CloudConfigurationManager
using Microsoft.Azure.Storage;

구성 파일에서 연결 문자열 검색하는 방법을 보여 주는 예제는 다음과 같습니다.Here's an example that shows how to retrieve a connection string from a configuration file:

// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

Azure 구성 관리자 사용은 선택 사항입니다.Using the Azure Configuration Manager is optional. 또한 .NET Framework의 ConfigurationManager 클래스와 같은 API를 사용할 수 있습니다.You can also use an API like the .NET Framework's ConfigurationManager class.

큐 서비스 클라이언트 만들기Create the Queue service client

CloudQueueClient 클래스를 사용하면 Queue Storage에 저장된 큐를 검색할 수 있습니다.The CloudQueueClient class enables you to retrieve queues stored in Queue storage. 서비스 클라이언트를 만드는 한 가지 방법은 다음과 같습니다.Here's one way to create the service client:

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

이제 데이터를 읽어 오고 Queue Storage에 데이터를 기록하는 코드를 작성할 준비가 되었습니다.Now you are ready to write code that reads data from and writes data to Queue storage.

큐 만들기Create a queue

이 예제에서는 큐가 없는 경우 만드는 방법을 보여 줍니다.This example shows how to create a queue if it does not already exist:

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a container.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Create the queue if it doesn't already exist
queue.CreateIfNotExists();

큐에 메시지 삽입Insert a message into a queue

기존 큐에 메시지를 삽입하려면 먼저 새 CloudQueueMessage를 만듭니다.To insert a message into an existing queue, first create a new CloudQueueMessage. 그런 다음, AddMessage 메서드를 호출합니다.Next, call the AddMessage method. CloudQueueMessage는 문자열(UTF-8 형식) 또는 바이트 배열에서 만들 수 있습니다.A CloudQueueMessage can be created from either a string (in UTF-8 format) or a byte array. 다음은 큐가 없는 경우 새로 만들고 'Hello, World' 메시지를 삽입하는 코드입니다.Here is code which creates a queue (if it doesn't exist) and inserts the message 'Hello, World':

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Create the queue if it doesn't already exist.
queue.CreateIfNotExists();

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.AddMessage(message);

다음 메시지 보기Peek at the next message

큐에서 메시지를 제거하지 않고도 PeekMessage 메서드를 호출하여 큐의 맨 앞에서 원하는 메시지를 볼 수 있습니다.You can peek at the message in the front of a queue without removing it from the queue by calling the PeekMessage method.

// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Peek at the next message
CloudQueueMessage peekedMessage = queue.PeekMessage();

// Display message.
Console.WriteLine(peekedMessage.AsString);

대기 중인 메시지의 콘텐츠 변경Change the contents of a queued message

큐에 있는 메시지의 콘텐츠를 변경할 수 있습니다.You can change the contents of a message in-place in the queue. 메시지가 작업을 나타내는 경우 이 기능을 사용하여 작업의 상태를 업데이트할 수 있습니다.If the message represents a work task, you could use this feature to update the status of the work task. 다음 코드는 큐 메시지를 새로운 콘텐츠로 업데이트하고 표시 제한 시간이 60초 더 늘어나도록 설정합니다.The following code updates the queue message with new contents, and sets the visibility timeout to extend another 60 seconds. 그러면 메시지와 연결된 작업의 상태가 저장되고 클라이언트에서 메시지에 대한 작업을 계속할 수 있는 시간이 1분 더 허용됩니다.This saves the state of work associated with the message, and gives the client another minute to continue working on the message. 이 기술을 사용하여 처리 단계가 하드웨어 또는 소프트웨어 오류로 인해 실패하는 경우 처음부터 시작하지 않고도 큐 메시지에 대한 여러 단계의 워크플로를 추적할 수 있습니다.You could use this technique to track multi-step workflows on queue messages, without having to start over from the beginning if a processing step fails due to hardware or software failure. 일반적으로, 다시 시도 수도 유지하므로, 메시지가 n 번 넘게 다시 시도된 경우 메시지를 지울 수도 있습니다.Typically, you would keep a retry count as well, and if the message is retried more than n times, you would delete it. 이 기능은 처리될 때마다 애플리케이션 오류를 트리거하는 메시지를 차단하여 보호해 줍니다.This protects against a message that triggers an application error each time it is processed.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Get the message from the queue and update the message contents.
CloudQueueMessage message = queue.GetMessage();
message.SetMessageContent2("Updated contents.", false);
queue.UpdateMessage(message,
    TimeSpan.FromSeconds(60.0),  // Make it invisible for another 60 seconds.
    MessageUpdateFields.Content | MessageUpdateFields.Visibility);

큐에서 다음 메시지 제거De-queue the next message

다음 코드는 2단계를 거쳐 큐에서 메시지를 제거합니다.Your code de-queues a message from a queue in two steps. GetMessage를 호출하면 큐에서 다음 메시지를 가져올 수 있습니다.When you call GetMessage, you get the next message in a queue. GetMessage 에서 반환된 메시지는 이 큐의 메시지를 읽는 다른 코드에는 표시되지 않습니다.A message returned from GetMessage becomes invisible to any other code reading messages from this queue. 기본적으로, 이 메시지는 30초간 표시되지 않습니다.By default, this message stays invisible for 30 seconds. 큐에서 메시지 제거를 완료하려면 DeleteMessage도 호출해야 합니다.To finish removing the message from the queue, you must also call DeleteMessage. 메시지를 제거하는 이 2단계 프로세스는 코드가 하드웨어 또는 소프트웨어 오류로 인해 메시지를 처리하지 못하는 경우 코드의 다른 인스턴스가 동일한 메시지를 가져와서 다시 시도할 수 있도록 보장합니다.This two-step process of removing a message assures that if your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. 코드는 메시지가 처리된 직후에 DeleteMessage 를 호출합니다.Your code calls DeleteMessage right after the message has been processed.

// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Get the next message
CloudQueueMessage retrievedMessage = queue.GetMessage();

//Process the message in less than 30 seconds, and then delete the message
queue.DeleteMessage(retrievedMessage);

일반적인 Queue Storage API와 함께 Async-Await 패턴 사용Use Async-Await pattern with common Queue storage APIs

이 예제에서는 일반적인 Queue Storage API와 함께 Async- Await 패턴을 사용하는 방법을 보여 줍니다.This example shows how to use the Async-Await pattern with common Queue storage APIs. 샘플의 경우 지정된 각 메서드의 비동기 버전을 호출하는데, 이 버전은 각 메서드의 Async 접미사로 표시됩니다.The sample calls the asynchronous version of each of the given methods, as indicated by the Async suffix of each method. 비동기 메서드가 사용되는 경우 호출이 완료될 때까지 Async-Await 패턴이 로컬 실행을 일시 중단합니다.When an async method is used, the async-await pattern suspends local execution until the call completes. 이 동작은 현재 스레드가 성능 병목 현상을 방지해주는 다른 작업을 수행할 수 있게 해주며, 애플리케이션의 전반적인 응답성을 향상시킵니다.This behavior allows the current thread to do other work, which helps avoid performance bottlenecks and improves the overall responsiveness of your application. .NET에서의 Async-Await 패턴 사용에 대한 자세한 내용은 Async 및 Await(C# 및 Visual Basic)을 참조하세요.For more details on using the Async-Await pattern in .NET see Async and Await (C# and Visual Basic)

// Create the queue if it doesn't already exist
if(await queue.CreateIfNotExistsAsync())
{
    Console.WriteLine("Queue '{0}' Created", queue.Name);
}
else
{
    Console.WriteLine("Queue '{0}' Exists", queue.Name);
}

// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");

// Async enqueue the message
await queue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");

// Async dequeue the message
CloudQueueMessage retrievedMessage = await queue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

// Async delete the message
await queue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

큐에서 메시지를 제거하는 추가 옵션 활용Leverage additional options for de-queuing messages

큐에서 메시지 검색을 사용자 지정할 수 있는 방법으로는 두 가지가 있습니다.There are two ways you can customize message retrieval from a queue. 먼저, 메시지의 배치(최대 32개)를 가져올 수 있습니다.First, you can get a batch of messages (up to 32). 두 번째로, 표시하지 않는 제한 시간을 더 길거나 더 짧게 설정하여 코드에서 각 메시지를 완전히 처리하는 시간을 늘리거나 줄일 수 있습니다.Second, you can set a longer or shorter invisibility timeout, allowing your code more or less time to fully process each message. 다음 코드 예제는 GetMessages 메서드를 사용하여 한 번 호출에 20개의 메시지를 가져옵니다.The following code example uses the GetMessages method to get 20 messages in one call. 그런 다음에 foreach 루프를 사용하여 각 메시지를 처리합니다.Then it processes each message using a foreach loop. 또한 각 메시지에 대해 표시하지 않는 제한 시간을 5분으로 설정합니다.It also sets the invisibility timeout to five minutes for each message. 5분은 모든 메시지에 대해 동시에 시작되므로, GetMessages에 대한 호출 이후로 5분이 지나고 나면 삭제되지 않은 모든 메시지가 다시 표시됩니다.Note that the 5 minutes starts for all messages at the same time, so after 5 minutes have passed since the call to GetMessages, any messages which have not been deleted will become visible again.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

foreach (CloudQueueMessage message in queue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
    // Process all messages in less than 5 minutes, deleting each message after processing.
    queue.DeleteMessage(message);
}

큐 길이 가져오기Get the queue length

큐에 있는 메시지의 추정된 개수를 가져올 수 있습니다.You can get an estimate of the number of messages in a queue. FetchAttributes 메서드는 메시지 수를 포함하여 큐 특성을 검색하도록 큐 서비스에 요청합니다.The FetchAttributes method asks the Queue service to retrieve the queue attributes, including the message count. ApproximateMessageCount 속성은 큐 서비스를 호출하지 않고 FetchAttributes 메서드에서 검색한 마지막 값을 반환합니다.The ApproximateMessageCount property returns the last value retrieved by the FetchAttributes method, without calling the Queue service.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Fetch the queue attributes.
queue.FetchAttributes();

// Retrieve the cached approximate message count.
int? cachedMessageCount = queue.ApproximateMessageCount;

// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);

큐 삭제Delete a queue

큐 및 해당 큐의 모든 메시지를 삭제하려면 큐 개체의 Delete 메서드를 호출합니다.To delete a queue and all the messages contained in it, call the Delete method on the queue object.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Delete the queue.
queue.Delete();

다음 단계Next steps

이제 Queue Storage의 기본 사항을 배웠으므로 다음 링크를 따라 좀 더 복잡한 스토리지 작업에 대해 알아보세요.Now that you've learned the basics of Queue storage, follow these links to learn about more complex storage tasks.