지난번에 Queue Storage 에서 큐에 대한 내용을 살펴보았습니다.

이번에는 큐에 메세지를 추가, 삭제, 그리고 피킹에 대해서 알아보겠습니다.

 

지난번에 사용한 예제에 이어서 진행 하겠습니다.

선택한 큐에 대한 메세지 목록을 보여주는 기능이 필요하므로 QueueList 메서드 부분이

수정되었습니다. Queue Name 을 클릭하면 Queue 에 포함된 메세지를 보여주는

하이퍼링크 HTML 코드 처리가 적용된 소스 입니다.

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><a href='./Default.aspx?qname=" + q.Name.Trim() + "'>" + q.Name + "</a></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>");

}

 

 

선택한 큐에 대한 메세지를 출력해주는 메서드 입니다.

큐 이름으로 큐에 대한 참조를 얻은 후 10개의 메세지를 가져오는 코드 입니다.

PeekMessages() 메서드는 큐에서 메세지를 꺼내지 않고 메세지 정보를 얻는 피킹(Peeking)

메서드 입니다. GetMessages() 메서드를 호출하면 실제 큐에서 메세지를 꺼내오게 됩니다.

DequeueCount 가 실제 큐에서 메세지를 꺼내온 횟수를 나타냅니다.

private void MessageList(string qname)

{

//Message List 조회

var qClient = GetClientInstance();

CloudQueue q =  qClient.GetQueueReference(qname);

 

IEnumerable<CloudQueueMessage> messages = q.PeekMessages(10);

//IEnumerable<CloudQueueMessage> messages = q.GetMessages(10);

 

string strhtml = "<table border='1' cellpadding='0' cellspacing='0'>";

strhtml += "<tr>";

strhtml += "<tr><td>id</td><td>insertion Time</td><td>Dequeue Count</td><td>Message</td>";

strhtml += "</tr>";

 

foreach (CloudQueueMessage m in messages)

{

strhtml += "<tr><td>" + m.Id + "</td>";

strhtml += "<td>" + m.InsertionTime + "</td>";

strhtml += "<td>" + m.DequeueCount.ToString() + "</td>";

strhtml += "<td>" + m.AsString + "</td></tr>";

}

strhtml += "</table>";

 

this.txtCurQueueName.Text = qname;

this.message_section.InnerHtml = strhtml;

 

}

 

 

큐에 메세지를 추가할 때 사용되는 코드 입니다.

protected void btnAddMsg_Click(object sender, EventArgs e)

{

string qname = this.txtCurQueueName.Text.Trim();

CloudQueue queue = GetClientInstance().GetQueueReference(qname);

CloudQueueMessage newmsg = new CloudQueueMessage(this.txtMsgValue.Text.Trim());

queue.AddMessage(newmsg);

MessageList(qname);

}

 

CloudMessage 객체를 생성하고 생성자에 Message 값을 지정하고 해당 큐에 AddMessage()

메서드를 호출하면 메세지가 추가 됩니다.

AddMessage() 메서드는 오버로드된 2개의 메서드를 제공해주는데 두번 째 메서드에서

실제 Message TimeSpan 형식의 TimeToLive 를 설정할 수 있습니다.

실제 Message 가 큐에 유지되는 타임라인을 설정하는 기능입니다.

 

Overload List


Name

Description

CloudQueue.AddMessage (CloudQueueMessage)

Adds a message to the queue.

CloudQueue.AddMessage (CloudQueueMessage, TimeSpan)

Adds a message to the queue.

 

해당 큐에서 메세지를 삭제

protected void btnDelMsg_Click(object sender, EventArgs e)

{

string qname = this.txtCurQueueName.Text.Trim();

CloudQueue queue = GetClientInstance().GetQueueReference(qname);

 

int popcnt = int.Parse(this.txtpopcnt.Text.Trim());

foreach (CloudQueueMessage msg in queue.GetMessages(popcnt))

{

queue.DeleteMessage(msg);

}

MessageList(qname);

}

 

메시지 삭제시에도 두 가지의 오버로드 된 메서드를 지원하고 있습니다.

주의 할점은 실제 메세지 삭제시에는 GetMessages() 로 큐에서 해당 메세지를 가져와서

삭제 해야 합니다. 그리고 큐 자체가 선입선출 방식이므로 중간에 메세지만 삭제할 수는 없습니다.

큐 구조에 맞게 순서대로 큐에서 메세지를 pop 연산을 통해 삭제해야 되기 때문입니다.

 

Overload List


Name

Description

CloudQueue.DeleteMessage (CloudQueueMessage)

Deletes a message.

CloudQueue.DeleteMessage (String, String)

Deletes a message.

 

수정된 전체 Default.aspx 디자인 코드

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebRole1.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 id="Head1" 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>

    <br />

    <div id="message_section" runat="server">

    </div>

    <div>

        <label>Current Queue</label>&nbsp;<asp:TextBox ID="txtCurQueueName" runat="server"></asp:TextBox>

    </div>

     <div>

        <label>Message/popReceipt</label>&nbsp;

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

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

        <asp:Button ID="btnAddMsg" Text="메세지추가" runat="server"

            onclick="btnAddMsg_Click" />

    </div>

     <div>

        <label>Popcount</label>&nbsp;

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

        <asp:Button ID="btnDelMsg" Text="메세지삭제" runat="server"

            onclick="btnDelMsg_Click" />

    </div>

    </form>

</body>

</html>

 

다음은 실행화면 입니다.

실행화면.png

 

다음 URL 에서 관련 클래스에 대한 추가적인 코드 정보를 얻을 수 있습니다.

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

 


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