【Azure Services Platform Step by Step-第11篇】Windows Azure兰州拉面馆-日志与队列的使用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

第9篇里,为了便于大家理解,我把Windows Azure的环境比喻成了"Azure兰州拉面馆"。本篇我们继续沿用这个比喻,讲讲Windows Azure中的队列(Queue Storage)与日志的使用。

 

Queue Storage【Azure Services Platform Step by Step-第9篇】Windows Azure Storage概览里介绍过,这里就不再重复了。顾名思义,Queue就是队列,按照先进先出的顺序来处理数据。在上图的“Azure兰州拉面馆”中,Queue就充当了记录点菜情况的小本子,前台服务员将顾客点的菜记录在Queue中,后台厨房的厨师则按照Queue中的顺序,一个一个地做菜(处理数据)。

Windows Azure Log是整个Azure平台运行情况的日志。微软官方把Windows Azure比喻成“云平台的操作系统”,既然是操作系统,当然会维护日志了!Windows Azure里提供了非常简单记录日志的办法,但很遗憾地是没有提供同样简单地查看日志的办法——换句话说,通过程序记录日志容易,查看日志繁琐。为了不偏题,本篇只展示如何在Development Fabric里查看日志。对于如何编程读取日志,感兴趣的读者可以参考WPF应用程序AzureLogViewer的源代码(见篇末附件)。

 

实验步骤:

 

第一步:

在VS2008中新建Web And Worker Cloud Service。这也是本系列文章中第一次用到Worker Role。

第9篇一样,添加对StorageClient的引用。

image

image

 

第二步:

运行Azure SDK里的image 和image ,并启动Development Storage里的Queue服务。

image

 

第三步:

配置好ServiceConfiguration.cscfg和ServiceDefinition.csdef。如有疑问,请参考【Azure Services Platform Step by Step-第8篇】开发部署Azure留言板或本文篇末附件内的示例代码。

image

 

 

第四步:

打开Web Role项目的Default.aspx,拖入以下控件:

TextBox txtMessage
Button btnSend
TextBox txtLog

image

第五步:
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.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);
}
}
}
}

这段程序中,值得注意的有三处:

  1. 获取当前应该处理的数据:Message msg = queue.GetMessage();  既然是队列,就必须按照先进先出的顺序来操作数据。使用者也只能通过GetMessage方法取得队列中最靠前的那条数据,不能取到其他数据。就像是排队买火车票,售票员只能卖给排到队伍最靠前的那个人。
  2. 删除消息:queue.DeleteMessage(msg);   这又像是排队买火车票,当排在最前面的那位仁兄买到票后,他应该马上从队伍中消失。
  3. RoleManager.WriteToLog(string eventLogName,string message)方法。
    这就是上文提到的,非常简单好用的记录日志的方法。用过log4net的程序员一看就明白,这简直是一个“山寨版”的log4net。它借鉴了log4net记录日志的模式,又阉割了log4net的配置和自定义格式功能。
    Azure Log支持的EventLog类型共有Critical,Error,Warning,Information,Verbose这5种。如果你没用过log4net或不明白EventLog类型的意思,可以尝试这样理解:Azure Log把日志分为5类;分类记录日志更加便于查看。本例中使用的是"Critical”,也只是为了方便查看而已。

第七步:

F5运行程序。此时我们的Azure兰州拉面馆就正式在Development Fabric中开业了!

打开Development Fabric看看。

选择我们刚部署的服务中的Worker Role,点击右键,选择"Clear logs”清屏,再选择Logging Level- Critical 。这就是对日志进行分类查看,我们选择了查看Criticial类别是因为我们在记录点菜信息时使用了Critical 。

image

 

第八步:

测试一下吧 :)

image

看,我们点菜,大厨依次做菜!

随便看一条数据吧,比如“(兰州版)扬州炒饭”这一项,我们在01点29分58秒的时候将它写入Queue。大厨发现Queue中有它后,在00点30分04秒中处理了它。

梳理一下流程:

点菜 - 把菜名写入Queue - 大厨每秒钟查看一次Queue,如果Queue中有需要做的菜,则按照先来后到的顺序做菜 -从记菜本中删除刚做好的菜 - 把做菜信息写入Azure Log中

 

到目前为止,我们掌握了:获取Queue Storage的引用、建立Queue、插入数据到Queue中(入队)、从Queue中取出数据(出队)、记录Azure系统日志、查看Azure系统日志。

 


本文转自 流牛木马 博客园博客,原文链接:http://www.cnblogs.com/azure/archive/2009/03/16/1412818.html,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
数据库连接 测试技术 Windows
【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题
【YashanDB知识库】windows配置ODBC跟踪日志, 使用日志定位问题
|
6月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
148 32
|
5月前
|
缓存 安全 网络协议
使用事件日志识别常见 Windows 错误
事件查看器是Windows操作系统中的标准诊断工具,用于记录系统事件,包括硬件问题、软件中断和系统行为等详细信息。通过分析这些日志,管理员能够追踪和解决系统错误。访问方法包括使用快捷键Win + R输入eventvwr.msc,或通过控制面板进入。事件查看器中的每条记录包含事件ID、来源和描述,帮助识别和解决问题。常见错误如蓝屏死机、DLL错误、驱动程序错误等,可通过更新驱动程序、运行系统诊断、使用恢复功能等方式解决。
295 4
|
6月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
95 11
|
6月前
|
监控 安全 网络安全
使用EventLog Analyzer日志分析工具监测 Windows Server 安全威胁
Windows服务器面临多重威胁,包括勒索软件、DoS攻击、内部威胁、恶意软件感染、网络钓鱼、暴力破解、漏洞利用、Web应用攻击及配置错误等。这些威胁严重威胁服务器安全与业务连续性。EventLog Analyzer通过日志管理和威胁分析,有效检测并应对上述威胁,提升服务器安全性,确保服务稳定运行。
169 2
|
6月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1887 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
5月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
142 9
|
3月前
|
存储 SQL 关系型数据库
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log、原理、写入过程;binlog与redolog区别、update语句的执行流程、两阶段提交、主从复制、三种日志的使用场景;查询日志、慢查询日志、错误日志等其他几类日志
235 35
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
|
2月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
135 13
|
2月前
|
缓存 Java 编译器