지난 아티클에서 Table, Blob 서비스에 대해서 개념적인 부분과 예제코드를 살펴보았습니다.

이제 하나 남은 Queue 서비스에 대해서 살펴보겠습니다.

 

Queue Storage 서비스는 무엇인가요?

Queue FIFO(First-in-First-Out) 선입선출 구조를 가지고 있는 메세지를 보관하는

저장소 메커니즘입니다. 큐에 먼저 들어간 메세지가 먼저 처리되는 방식입니다.

(Queue)라는 저장소에 메세지가 보관되며 메세지는 생산자와 소비자로 구분되게 됩니다.

정확한 표현인지는 모르겠지만 하나의 예를 들면 대형 이마트에서 물건을 구매해서 많은 사람들이 카운터에서

결제처리를 완료한 다음 카운터를 빠져 나갑니다.

줄을 서 있는 구조가 큐가 되고 그 중 한사람이 메세지를 생산한 생산자가 되고 들고 있는 물건이 메세지에

비유할 수 있겠습니다. 그리고 카운터에서 계산하는 점원이 소비자로 비유할 수 있겠습니다.

빨리 계산해서 샹콤하게 내보내야 하니깐요.. 쿨럭..

Qmail 로 예를 들면 사용자가 메일을 발송하면 시스템 내부적으로 SMTP 서버에 메일을 발송합니다.

이때 MTA(Mail Transfer Agent)가 메일 발송 처리 역활을 담당하고 하나의 메일 자체가 메세지 구조를 가지고

해당 메일서버 큐에 쌓이게 됩니다.

그럼 백그라운드로 실행되는 MDA(Mail Delivery Agent) 가 큐에 쌓여있는 메세지를 하나씩 순서대로 파싱해서

 메세지 처리를 하게 되는 구조 입니다. 시스템 측면에서 보면 MTA 가 메세지 생산자이고 MDA 가 메세지 소비자에

해당 합니다. 요약해서 서비스(컴포넌트)끼리 메세지를 통해서 통신할 때 주로 사용되는  

방법이며 느슨하게 결합된(loose coupling) 시스템을 구축하는 방법으로 큐를 많이 사용합니다.

분산 컴포넌트 환경에서 자주 쓰이던 MSMQ(Message Queueing) 도 비슷한 맥락입니다.

Windows Azure 에서는 이러한 Queue 구조로 Storage 서비스를 제공해주는데 이에 대한 명칭이

Queue Storage 서비스 입니다.

 

클라우드 환경에서는 백그라우드 형식의 Worker Role 을 두 개 만들어서 하나는 메세지 생산자 역활,

하나는 메세지 소비자 역활, 이 때 Queue 스토리지 서비스를 이용해서 서비스(컴포넌트)끼리 메세지 통신에

사용하면 어떨까 라는 생각을 해 봅니다.

엄청 고민해서 쉽게 설명할려고 했는데 역시나 어렵네요..^^

 

그러면 Queue 스토리지 서비스에 대해서 알아 보겠습니다.

몇 가지 특성은 다음과 같습니다.

1.     큐에 담을 수 있는 메세지 개수 제한 없음

2.     큐 이름은 모두 소문자만 가능

3.     큐 이름은 3자에서 63길이의 문자로 구성되어야 함

 

Queue Storage 의 자세한 특성은 다음 URL을 참고하시기 바랍니다.

http://msdn.microsoft.com/en-us/library/dd179363.aspx

 

그럼 우선 Queue 리스트 조회, 추가, 삭제에 관련된 기능과 해당 코드에 대해서 살펴 보겠습니다.

예제에서는 Web Role 형식의 ASP.NET 프로젝트를 생성 하였습니다.

기본 페이지 Deafult.aspx 에서 샘플 페이지를 만들었습니다.

 

Namespace 참조

using Microsoft.WindowsAzure;

using Microsoft.WindowsAzure.StorageClient;

 

 

QueueClient 인스턴스 반환 메서드

private CloudQueueClient GetClientInstance()

{

CloudQueueClient client =

new CloudQueueClient("http://algorizmstorage.queue.core.windows.net", new StorageCredentialsAccountAndKey("youraccount",

"accesskey”

 

return client;

}

 

 

큐 목록 조회 Page_Load() 메서드

private void QueueList()

{

//Queue List 조회

IEnumerable<CloudQueue> queueList = GetClientInstance().ListQueues();

 

Response.Write("<table border='1' cellpadding='0' cellspacing='0'>");

Response.Write("<tr><td>Queue Name</td><td>Queue AbsoluteUri</td>");

Response.Write("<td>Metadata</td></tr>");

foreach (var q in queueList)

{

Response.Write("<tr><td>" + q.Name + "</td>");

Response.Write("<td>" + q.Uri.AbsoluteUri + "</td>");

 

if (q.Metadata.Keys.Count > 0)

{

Response.Write("<table border='1' cellpadding='0' cellspacing='0'>");

foreach (string str in q.Metadata.AllKeys)

{

Response.Write("<tr><td>" + str + "</td></tr>");

}

Response.Write("</table>");

}

}

 

Response.Write("</table>");

}

 

Table, Blob, Queue 모두 Storage 인증 처리 시 똗같은 사용법을 가지고 있습니다.

CloudStorageAccount 클래스를 사용하여 인증처리를 하거나 각 서비스 통신 클라이언트에 해당되는 queue

경우에는 CloudQueueClient 클래스를 사용하여 인증 처리를 합니다.

그 후에 간단하게 IEnumrable 반복자로 CloudQueue 클래스의 제네릭 형식으로 리스트를 반환 받습니다.

큐에는 메타데이터를 포함할 수 있는데 8KB 까지 데이터 저장이 가능합니다.

 

QueueAttributes Class

http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.queueattributes.aspx

 

새로운 큐 만들기

//Queue 생성

CloudQueue queue = GetClientInstance().GetQueueReference(this.txtqueuename.Text.Trim());

if (queue.CreateIfNotExist())

{

Response.Write("Created Queue!");

QueueList();

}

 

큐 만드는 방법도 역시 간단합니다.

큐 이름에 해당하는 참조를 얻은 후 CreateIfNotExist() 메서드를 호출하면 생성 됩니다.

 

큐에 메타데이터 추가하기

CloudQueue queue = GetClientInstance().GetQueueReference(this.txtqueuename.Text.Trim());

            queue.Metadata.Add(this.txtmetaname.Text.Trim(), this.txtmetavalue.Text.Trim());

            queue.SetMetadata();

            QueueList();

 

큐에 메타데이터를 추가하는 코드 입니다.

테스트를 해 봤는데 이상한 점이 있습니다.

실제 queue.Meata.Add() 메서드를 호출시 디버깅 해 보면 값이 추가되어 있는데

리스트 조회 시 표시되지 않습니다. 무엇이 문제일까요..? 마이크로소프트에 문의가 필요할듯..

 

큐 삭제하기

CloudQueue queue = GetClientInstance().GetQueueReference(this.txtqueuename.Text.Trim());

            queue.Clear();

            queue.Delete();

            QueueList();

 

큐를 삭제하기 전에 Clear() 메서드를 호출하여 큐에 포함된 메세지를 삭제해 줍니다.

그리고 난 후 Delete() 메서드를 호출합니다.

 

Default.aspx 디자인 소스

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ExamQueue.Default" %>

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title></title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <label>큐이름</label>&nbsp;

        <asp:TextBox ID="txtqueuename" runat="server"></asp:TextBox>

        <asp:Button ID="btncreatequeue" Text="큐생성" runat="server"

            onclick="btncreatequeue_Click" />&nbsp;

        <asp:Button ID="btndeletequeue" Text="큐삭제" runat="server"

            onclick="btndeletequeue_Click" />

    </div>

    <div>

        <label>MetaDataKey</label>&nbsp;

        <asp:TextBox ID="txtmetaname" runat="server"></asp:TextBox>

        <label>MetaDataValue</label>&nbsp;

        <asp:TextBox ID="txtmetavalue" runat="server"></asp:TextBox>

        <asp:Button ID="Button1" Text="메타데이터추가" runat="server"

            onclick="btnaddmeta_Click" />

    </div>

    </form>

</body>

</html>

 

 

 

실행화면

예제실행화면.png

 

긴 글 끝까지 읽어주셔서 감사합니다.. '')..)

다음에는 큐에 메세지를 추가, 삭제하고 피킹하는 코드에 대해서 살펴보겠습니다.



Azure - 클라우드 컴퓨팅 - 시리즈 강좌 리스트
[Azure강좌] 1. 클라우드와 원도우 애저 소개
[Azure강좌] 2. SDK 설치와 Azure 무료 신청
[Azure강좌] 3. ASP.NET(Web Role) Hello World
[Azure강좌] 4. 프로젝트 패키지 Azure 배포
[Azure강좌] 5. Windows Azure Storage 서비스와 계정 설정
[Azure강좌] 6. 테이블 서비스와 StorageClient 라이브러리 #1
[Azure강좌] 7. SQL Azure 소개와 서버 구성
[Azure강좌] 8. 데이터베이스 생성과 SSMS 사용
[Azure강좌] 9. SQL Azure 마이그레이션 위자드 사용하기
[Azure강좌] 10. SQL Azure 방화벽 설정
[Azure강좌] 11. SQL Azure Manage 툴 사용해 보기
[Azure강좌] 12. 테이블 서비스와 StorageClient 라이브러리 #2
[Azure강좌] 13. SQL Azure ASP.NET GridView 바인딩
[Azure강좌] 14. Blob 서비스와 Container
[Azure강좌] 15. Blob 리스트 조회, 업로드 다운로드 예제
[Azure강좌] 16. 웹사이트 콘텐트 Blob 스토리지 이용
[Azure강좌] 17. Windows Azure CDN 설정
[Azure강좌] 18. Queue 서비스와 생성, 삭제, 메타데이터 추가
[Azure강좌] 19. Queue 의 메시지 피킹 및 가져오기, 추가, 삭제
[Azure강좌] 20. [Tip] SQL Azure 방화벽 룰 설정 예제 애플리케이션



Azure - 클라우드 컴퓨팅 - 동영상 참고 자료

[Azure 동영상 강좌] 1. 클라우드와 원도우 애저 소개 (애저 포털 둘러보기) 

[Azure 동영상 강좌] 2. SDK 설치와 Azure 무료 신청
[Azure 동영상 강좌] 3. ASP.NET(Web Role) Hello World
[Azure 동영상 강좌] 4. 프로젝트 패키지 Azure 배포
[Azure 동영상 강좌] 5. Windows Azure Storage 서비스와 계정 설정
[Azure 동영상 강좌] 6. 테이블 서비스와 StorageClient 라이브러리 #1
[Azure 동영상 강좌] 7. SQL Azure 소개와 서버 구성
[Azure 동영상 강좌] 8. 데이터베이스 생성과 SSMS 사용
[Azure 동영상 강좌] 9. SQL Azure 마이그레이션 위자드 사용하기
[Azure 동영상 강좌] 10. SQL Azure 방화벽 설정
[Azure 동영상 강좌] 11. SQL Azure Manage 툴 사용해 보기
[Azure 동영상 강좌] 12. 테이블 서비스와 StorageClient 라이브러리 #2
[Azure 동영상 강좌] 13. SQL Azure ASP.NET GridView 바인딩
[Azure 동영상 강좌] 14. Blob 서비스와 Container
[Azure 동영상 강좌] 15. Blob 리스트 조회, 업로드 다운로드 예제
[Azure 동영상 강좌] 16. 웹사이트 콘텐트 Blob 스토리지 이용
[Azure 동영상 강좌] 17. Windows Azure CDN 설정
[Azure 동영상 강좌] 18. Queue 서비스와 생성, 삭제, 메타데이터 추가
[Azure 동영상 강좌] 19. Queue 의 메시지 피킹 및 가져오기, 추가, 삭제
[Azure 동영상 강좌] 20. [Tip] SQL Azure 방화벽 룰 설정 예제 애플리케이션





profile

안녕하세요. 이호엽 입니다!

ASP.NET 프론티어 

블로그: algorizm.tistory.com