第五步:在Button btnSend的Click中加入btnSend_Click。代码如下:
protected void btnSend_Click(object sender, EventArgs e)
{
//读取Queue服务的配置。注意:RoleManager.GetConfigurationSetting获取的是
//service configuration(即ServiceConfiguration.cscfg文件)里的配置。
Uri baseUri = new Uri(RoleManager.GetConfigurationSetting("QueueEndpoint"));
string accountName = RoleManager.GetConfigurationSetting("AccountName");
string accountKey = RoleManager.GetConfigurationSetting("AccountSharedKey");
//初始化StorageAccountInfo实体。
StorageAccountInfo account = new StorageAccountInfo(
baseUri,
null,
accountName,
accountKey);
//创建一个QueueStorage(即Queue Storage服务)的实体
QueueStorage service = QueueStorage.Create(account);
//创建一个MessageQueue(即队列)的实体。
//这个queue就是咱们Azure拉面馆的“记菜本”了
//我们把这个记菜本取名为"message"。
MessageQueue queue = service.GetQueue("messages");
//判断当前Queue Storage服务中是否已经存在"message"
if (!queue.DoesQueueExist())
{
queue.CreateQueue();
}
//把点菜信息记录到记菜本中!
Message msg = new Message(txtMessage.Text);
queue.PutMessage(msg);
txtLog.Text += "\n你在"+DateTime.Now.ToString("HH点mm分ss秒")+"点了一份\"" + txtMessage.Text.Trim()+'\"';
txtMessage.Text = string.Empty;
}
{
//读取Queue服务的配置。注意:RoleManager.GetConfigurationSetting获取的是
//service configuration(即ServiceConfiguration.cscfg文件)里的配置。
Uri baseUri = new Uri(RoleManager.GetConfigurationSetting("QueueEndpoint"));
string accountName = RoleManager.GetConfigurationSetting("AccountName");
string accountKey = RoleManager.GetConfigurationSetting("AccountSharedKey");
//初始化StorageAccountInfo实体。
StorageAccountInfo account = new StorageAccountInfo(
baseUri,
null,
accountName,
accountKey);
//创建一个QueueStorage(即Queue Storage服务)的实体
QueueStorage service = QueueStorage.Create(account);
//创建一个MessageQueue(即队列)的实体。
//这个queue就是咱们Azure拉面馆的“记菜本”了
//我们把这个记菜本取名为"message"。
MessageQueue queue = service.GetQueue("messages");
//判断当前Queue Storage服务中是否已经存在"message"
if (!queue.DoesQueueExist())
{
queue.CreateQueue();
}
//把点菜信息记录到记菜本中!
Message msg = new Message(txtMessage.Text);
queue.PutMessage(msg);
txtLog.Text += "\n你在"+DateTime.Now.ToString("HH点mm分ss秒")+"点了一份\"" + txtMessage.Text.Trim()+'\"';
txtMessage.Text = string.Empty;
}
最关键的就是一步:queue.PutMessage(msg); 就这样很轻松地把消息存入队列了。
第六步:
打开WorkerRole项目里的WorkerRole.cs。我们首先要对Start()进行override 。
Start()函数可以理解为Worker Role的入口函数。一旦Worker Role被部署,就会触发Start()。
我们讨论过,Worker Role的牛X之处就是可以让一段程序一直在运行。如何做到呢?只需把Start()方法写成一个死循环方法就好了。
public override void Start()
{
// 初始化账户信息
Uri baseUri = new Uri(RoleManager.GetConfigurationSetting("QueueEndpoint"));
string accountName = RoleManager.GetConfigurationSetting("AccountName");
string accountKey = RoleManager.GetConfigurationSetting("AccountSharedKey");
StorageAccountInfo account = new StorageAccountInfo(
baseUri,
null,
accountName,
accountKey);
QueueStorage service = QueueStorage.Create(account); // 取得对这个名叫"message"的记菜本Queue的引用
MessageQueue queue = service.GetQueue("messages");
// 构造死循环 while (true)
{ // 死循环中的程序每一秒执行一次 Thread.Sleep(10000);
if (queue.DoesQueueExist())
{ // 取得记菜本中的当前应该处理的消息 Message msg = queue.GetMessage();
if (msg != null)
{ // 记录Windows Azure Log RoleManager.WriteToLog("Critical",
string.Format("大厨已经在{0}把{1} 做好了。",DateTime.Now.ToString("HH点mm分ss秒"), msg.ContentAsString()));
// 记录删除刚才已经处理的那条消息 queue.DeleteMessage(msg);
}
}
}
}
{
// 初始化账户信息
Uri baseUri = new Uri(RoleManager.GetConfigurationSetting("QueueEndpoint"));
string accountName = RoleManager.GetConfigurationSetting("AccountName");
string accountKey = RoleManager.GetConfigurationSetting("AccountSharedKey");
StorageAccountInfo account = new StorageAccountInfo(
baseUri,
null,
accountName,
accountKey);
QueueStorage service = QueueStorage.Create(account); // 取得对这个名叫"message"的记菜本Queue的引用
MessageQueue queue = service.GetQueue("messages");
// 构造死循环 while (true)
{ // 死循环中的程序每一秒执行一次 Thread.Sleep(10000);
if (queue.DoesQueueExist())
{ // 取得记菜本中的当前应该处理的消息 Message msg = queue.GetMessage();
if (msg != null)
{ // 记录Windows Azure Log RoleManager.WriteToLog("Critical",
string.Format("大厨已经在{0}把{1} 做好了。",DateTime.Now.ToString("HH点mm分ss秒"), msg.ContentAsString()));
// 记录删除刚才已经处理的那条消息 queue.DeleteMessage(msg);
}
}
}
}