操作Queue中的消息

Queue中的消息有多种操作方法,包括推入消息,删除消息,解析消息,查询消息等,有三种数据类型可以作为原始Queue消息,分别是:流,字节数组和字符串。首先我们来看看如何将消息推入到Queue中。

将消息推入Queue

本文将使用定义的Address类作为实体类,因为XML是消息交换通用的格式,因此我们将把Address实例数据使用.Net XmlSerialization类转换成XML字符串后,再推入到Queue中,下面的代码显示了将Address实体数据转换成XML字符串,然后将其作为一个队列消息推入到Queue中。

protected void btnAddAddress_Click(object sender, EventArgs e)

{

if (Page.IsValid)

{

_GetXmlPayloadQueue().PutMessage(new Message(_ComposeXmlString()));

}

}

private string _ComposeXmlString()

{

Address address = new Address(txtAddress1.Text.Trim(),

txtAddress2.Text.Trim(),

txtCity.Text.Trim(),

(State)combState.SelectedIndex,

txtZip.Text.Trim(),

txtCounty.Text.Trim(),

txtCountry.Text.Trim(),

string.Empty);

XmlSerializer serializer = new XmlSerializer(address.GetType());

StringBuilder sb = new StringBuilder();

StringWriter writer = new StringWriter(sb);

serializer.Serialize(writer, address);

return writer.GetStringBuilder().ToString();

}

private BlobContainer GetXmlPayloadContainer()

{

_Initialization();

return _blobStorage.GetBlobContainer(WorkerRole.XML_CONTAINER_NAME);

}

private MessageQueue _GetXmlPayloadQueue()

{

_Initialization();

return _queueStorage.GetQueue(WorkerRole.XML_PAYLOAD_QUEUE_NAME);

}

protected void btnDelete_Click(object sender, EventArgs e)

{

Message message = _GetXmlPayloadQueue().GetMessage(UPDATE_TIMEOUT_SEC);

if (message != null)

{

_GetXmlPayloadQueue().DeleteMessage(message);

}

}

与普通的Windows队列对象不同,当一个消息放入Cloud Queue后,应用程序可以对它进行多次读取,如果没有服务明确地删除Queue中的消息,它就不会从Queue消失,消息主体存储在Message表的data字段。

1显示了当消息提交到本地开发环境中的Queue,从本地数据库查询的结果。

1 Messagedata字段持久化的Queue消息,消息经过编码了

删除Queue中消息

删除Queue中的消息非常简单,下面的btnDelete_Click()方法实现了,当点击一个按钮时,就从Queue中删除消息。

const int UPDATE_TIMEOUT_SEC = 5;

protected void btnDelete_Click(object sender, EventArgs e)

{

Message message = _GetXmlPayloadQueue().GetMessage(UPDATE_TIMEOUT_SEC);

if (message != null)

{

_GetXmlPayloadQueue().DeleteMessage(message);

}

}

这里指定超时的原因是,消息进入Queue有一段锁定时间,在这段时间内消息是不能删除的,消息解锁后就可以使用了。

解析Queue中的消息

接收到消息后,我们需要将其还原为原始的数据格式,Azure SDK提供的Message类包含了消息解析功能,可以将消息解析为数组或字符串。

const int UPDATE_TIMEOUT_SEC = 5;

Message message = _GetXmlPayloadQueue().GetMessage(UPDATE_TIMEOUT_SEC);

if (message != null)

{

btnDelete.Enabled = true;

LabelMessage.Text = Server.HtmlEncode(message.ContentAsString());

}

else

{

btnDelete.Enabled = false;

}

使用HTTP REST查询Queue

使用HTTP REST查询Queue的语法如下表所示。

REST API

HTTP

示例

描述

Create Queue

PUT

http://myaccount.queue.core.

windows.net/myqueue

 

Delete Queue

DELETE

http://myaccount.queue.core.

windows.net/myqueue

 

Get Metadata

GET/HEAD

http://127.0.0.1:10001/myaccount/

myqueue?comp=metadata

也返回消息数量,其它属性是自由格式的名称/值对

Set Metadata

PUT

http://127.0.0.1:10001/myaccount/

myqueue?comp=metadata

 

Get Messages

GET

http://127.0.0.1:10001/myaccount/

myqueue/messages

 

Peek Messages

GET

http://myaccount.queue.core.

windows.net/myqueue/messages?

peekonly=true

 

Delete Message

DELETE

http://127.0.0.1:10001/myaccount/

myqueue/messages/messageid?popreceipt

=string-value"lightweight commit"

 

Clear Messages

DELETE

http://myaccount.queue.core.

windows.net/myqueue/messages

删除Queue中的所有消息

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9914854/viewspace-667103/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9914854/viewspace-667103/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值