.NET을 사용하여 Azure Queue Storage 및 메시지 생성 및 관리
이 단원에서는 .NET 프로젝트의 코드 조각을 표시하여 Azure Queue Storage에서 큐를 만들고 메시지를 관리하는 방법을 다룹니다.
코드 예제는 다음 NuGet 패키지를 사용합니다.
- .NET용 Azure.Core 라이브러리: 이 패키지는 최신 .NET Azure SDK 클라이언트 라이브러리에 대한 공유 기본 형식, 추상화 및 도우미를 제공합니다.
- .NET용 Azure.Storage.Common 클라이언트 라이브러리: 이 패키지는 기타 Azure Storage 클라이언트 라이브러리에서 공유하는 인프라를 제공합니다.
- .NET용 Azure.Storage.Queues 클라이언트 라이브러리: 이 패키지는 클라이언트가 액세스할 수 있는 메시지를 저장하기 위해 Azure Queue Storage 작업을 수행할 수 있도록 합니다.
- .NET용 System.Configuration.ConfigurationManager 라이브러리: 이 패키지는 클라이언트 애플리케이션의 구성 파일에 대한 액세스를 제공합니다.
큐 서비스 클라이언트 만들기
QueueClient
클래스를 사용하면 큐 스토리지에 저장된 큐를 검색할 수 있습니다. 서비스 클라이언트를 만드는 한 가지 방법은 다음과 같습니다.
QueueClient queueClient = new QueueClient(connectionString, queueName);
큐 만들기
이 예제에서는 큐가 아직 없는 경우 큐를 만드는 방법을 보여 줍니다.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue
queueClient.CreateIfNotExists();
큐에 메시지 삽입
기존 큐에 메시지를 삽입하려면 SendMessage
메서드를 호출합니다. 메시지는 문자열(UTF-8 형식) 또는 바이트 배열에서 만들 수 있습니다. 다음은 큐가 없는 경우 새로 만들고 메시지를 삽입하는 코드입니다.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to create and manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
// Create the queue if it doesn't already exist
queueClient.CreateIfNotExists();
if (queueClient.Exists())
{
// Send a message to the queue
queueClient.SendMessage(message);
}
다음 메시지 보기
PeekMessages
메서드를 호출하여 큐에서 제거하지 않고 메시지를 피킹할 수 있습니다. maxMessages
매개 변수에 대한 값을 전달하지 않으면 기본값은 하나의 메시지를 피킹하는 것입니다.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Peek at the next message
PeekedMessage[] peekedMessage = queueClient.PeekMessages();
}
대기 중인 메시지의 콘텐츠 변경
큐에 있는 메시지의 콘텐츠를 변경할 수 있습니다. 메시지가 작업을 나타내는 경우 이 기능을 사용하여 작업의 상태를 업데이트할 수 있습니다. 다음 코드는 큐 메시지를 새로운 콘텐츠로 업데이트하고 표시 제한 시간이 60초 더 늘어나도록 설정합니다. 그러면 메시지와 연결된 작업의 상태가 저장되고 클라이언트에서 메시지에 대한 작업을 계속할 수 있는 시간이 1분 더 허용됩니다.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the message from the queue
QueueMessage[] message = queueClient.ReceiveMessages();
// Update the message contents
queueClient.UpdateMessage(message[0].MessageId,
message[0].PopReceipt,
"Updated contents",
TimeSpan.FromSeconds(60.0) // Make it invisible for another 60 seconds
);
}
큐에서 다음 메시지 제거
2단계를 거쳐 큐에서 메시지를 제거합니다. ReceiveMessages
를 호출하면 큐에서 다음 메시지를 가져옵니다. ReceiveMessages
에서 반환된 메시지는 이 큐의 메시지를 읽는 다른 코드에는 표시되지 않습니다. 기본적으로, 이 메시지는 30초간 표시되지 않습니다. 큐에서 메시지 제거를 완료하려면 DeleteMessage
도 호출해야 합니다. 메시지를 제거하는 이 2단계 프로세스는 코드가 하드웨어 또는 소프트웨어 오류로 인해 메시지를 처리하지 못하는 경우 코드의 다른 인스턴스가 동일한 메시지를 가져와서 다시 시도할 수 있도록 보장합니다. 코드는 메시지가 처리된 직후에 DeleteMessage
를 호출합니다.
// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Get the next message
QueueMessage[] retrievedMessage = queueClient.ReceiveMessages();
// Process (i.e. print) the message in less than 30 seconds
Console.WriteLine($"Dequeued message: '{retrievedMessage[0].Body}'");
// Delete the message
queueClient.DeleteMessage(retrievedMessage[0].MessageId, retrievedMessage[0].PopReceipt);
}
큐 길이 가져오기
큐에 있는 메시지의 추정된 개수를 가져올 수 있습니다. GetProperties
메서드는 메시지 수를 포함한 큐 속성을 반환합니다. ApproximateMessagesCount
속성은 큐에 있는 적절한 메시지의 개수를 포함합니다. 이 숫자는 큐에 있는 실제 메시지 수보다 낮지 않으며 더 높을 수도 있습니다.
/// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
QueueProperties properties = queueClient.GetProperties();
// Retrieve the cached approximate message count.
int cachedMessagesCount = properties.ApproximateMessagesCount;
// Display number of messages.
Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
}
큐 삭제
큐와 큐에 포함된 모든 메시지를 삭제하려면 큐 개체의 Delete
메서드를 호출합니다.
/// Get the connection string from app settings
string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];
// Instantiate a QueueClient which will be used to manipulate the queue
QueueClient queueClient = new QueueClient(connectionString, queueName);
if (queueClient.Exists())
{
// Delete the queue
queueClient.Delete();
}