作者信息:本篇文章是由Windows Azure 和 ASP.NET MVC组程序员/作家RickAnderson所著。

重启Web Roles

如何重启是Windows Azure 中一个经常被忽视的问题。正确处理重启操作至关重要,这样您就不至于丢失数据或损坏您固有的数据,便于您快速关机、 重启和高效率地处理新的请求。Windows Azure Cloud Service每月大约重启两次用于更新操作系统。 (关于操作系统更新的详细,请参阅RoleInstance Restarts Due to OS Upgrades。)当一个页面应用程序关闭时,将触发RoleEnvironment.Stopping事件。因为由 Visual Studio 创建的 web role boilerplate不会去重写OnStop方法,所以应用程序在关机前只有几秒钟时间来处理 HTTP 请求。如果您的 web role正忙着处理挂起的请求,有些请求就有可能会丢失。你可以延迟重启时间或让您的 web role推迟最多 5 分钟的时间来重写OnStop方法和调用Sleep,但这并不是很理想。一旦引发Stopping事件,Load Balance(LB)就停止向web role发送请求,所以拖延关机时间长于处理挂起请求让您的虚拟机处于Sleep状态的时间,并不起什么作用。最佳的方法是等待OnStop方法直到没有更多的请求,然后启动关机。关的越早,VM 重启并开始处理请求就越早。要想使用最佳方法关机,请将下面的代码添加到WebRole类中。

上面的代码检查 ASP.NET 请求的当前的counter。只要有请求,该OnStop方法将调用Sleep延迟关机。一旦当前请求的counter降为零, OnStop返回并启动关机。万一  web 服务器太忙而不能在 5 分钟内处理完挂起的请求,应用程序也会强行关闭。请记住一旦触发Stopping事件,LB 会停止将请求发送到 web role,所以除非您拥有大量的web role (或太少的实例),否则永远不要超过几秒钟来完成当前请求。

上面的代码为Trace写入数据,但除非您执行一个复杂的On-DemandTransfer,不然 OnStop方法的trace数据将永远不会出现在WADLogsTable上。后面,我将介绍如何使用DebugView来查看这些trace事件。以及如何在web role 的OnStart方法中获取tracing working。

Worker Roles的最佳重启方法

在一个worker role中处理Stopping事件需要不同的办法。通常worker role在Run方法中处理队列消息。该方法包括两个全局变量 ;一个通知Run方法Stopping事件已触发,另一个通知OnStop方法可以安全地启动关机。(OnStop返回后启动关机)。下面的代码演示了这两种全局方法。

OnStop调用时,全局变量onStopCalled设置为 true,若没有队列事件需要处理,在Run方法中就可以根据onStopCalled的值在第一层循环时判断是否关机。

查看 OnStop Trace Data

如前面所提到的,除非您执行一个复杂的On-DemandTransfer,不然 OnStop方法的trace数据将永远不会出现在WADLogsTable上。我们将使用Dbgview来查看这些trace事件。在SolutionExplorer中,右键单击云项目并选择Publish.

下载您的发布配置文件。在Publish Windows Azure Application对话框中,选择Debug并勾选Enable RemoteDesktop for all roles

编译器会将Trace调用从发布版本中移除,所以您需要设置buildconfiguration为Debug来查看Trace数据。一旦应用程序发布并运行,在 Visual Studio 中,选择Server Explorer (Ctl + Alt + S)。选择Windows Azure Compute,然后选择您的云部署。(此项目中叫做t6,它是一个production部署)。选择 web role instance,单击鼠标右键,选择Connect usingRemote Desktop.

Remote DesktopConnection (RDC)将使用您在发布向导中指定的帐户名称,并提示您输入密码。在任务栏的左侧,选择Server Manager图标。

Server Manager左选项卡,选择Local Server,然后选择IE EnhancedSecurity Configuration (IE ESC)。在IE ESC 对话框中选择关闭radio按钮。

启动InternetExplorer、 下载和安装DebugView。启动DebugView,并在Capture菜单中,选择Capture GlobalWin32。

选择filter图标,,然后输入下面的排除筛选器:

对于此测试,我在About操作方法中添加了RoleEnvironment.RequestRecycle方法,正如其名字所示,启动关机/重启序列。或者,您可以重新发布应用程序,还将启动关机/重启序列。

按照同样的操作也可以查看worker role VM中的trace data。选择worker roleinstance,用鼠标右键单击并选择Connect using Remote Desktop。

如果您想看到一篇这样的博客,是关于如何让获取trace数据出现在WADLogsTable上而不是用OnStop方法,请联系我。本篇的大部分内容来自于我和Tom上周发布的Azuremulti-tier tutorial。您一定在此篇文章中也看到了一些其他好的方法。

— — Rick
@RickAndMSFT

Reference: http://blogs.msdn.com/b/windowsazure/archive/2013/01/14/the-right-way-to-handle-azure-onstop-events.aspx

转载于:https://www.cnblogs.com/new0801/archive/2013/01/18/6176459.html

正确处理 Azure OnStop 事件相关推荐

  1. java 简单事件的使用,如何正确的使用Java事件通知(1)

    如何正确的使用Java事件通知(1) 通过实现观察者模式来提供 Java 事件通知(Java event notification)似乎不是件什么难事儿,但这过程中也很容易就掉进一些陷阱.本文介绍了我 ...

  2. azure的虚拟机怎么选_如何正确选择Azure云虚拟机?

    随着微软云变得越来越先进,构建基础架构即服务也变得更加容易. 当微软公司首次推出Azure虚拟机时,只有少数几个默认服务器大小可供使用.那么您就需要问自己一个简单的问题:是否有一款服务器可以支持我的工 ...

  3. 编程疑难杂症の设置正确却无效的事件代码

    引言:在自己使用Microsoft Visual C# 速成版编程过程中,时不时总出现一些很郁闷的问题,一直尚未得到解决,在此特地列出来,向园里的朋友们求助讨论一番. 注:本人已经Google和百度求 ...

  4. Android 正确判断屏幕解锁事件

    之前在项目里需要监听屏幕解锁事件,所以做了点调研,其实很简单 就是动态监听屏幕解锁广播:"Intent.ACTION_USER_PRESENT",当手机设置了锁屏,这个方法是没问题 ...

  5. 怎样正确处理WinForm中Listview的ItemCheck事件

    我很少写具体的对象应用心得,这次尝试一下. WinForm中Listview的ItemCheck事件,例子如下:   private void lvwTables_ItemCheck(object s ...

  6. Microsoft发布用于统一事件处理的Azure事件网格

    今天,Microsoft发布了一项新服务,用于获取和处理云端事件.Azure事件网格(Event Grid)能够获取到从Azure服务中或者自定义应用程序中生成的事件,并且路由至所选择的处理程序.这项 ...

  7. 详细故障排除步骤:针对 Azure 中到 Windows VM 的远程桌面连接问题

    本文提供详细的故障排除步骤,用于为基于 Windows 的 Azure 虚拟机诊断和修复复杂的远程桌面错误. Important 若要消除更常见的远程桌面错误,请务必先阅读远程桌面的基本故障排除文章, ...

  8. html的后绑定事件,HTML 控件绑定事件

    文章摘自  http://www.jb51.net/article/26552.htm 1. 第一种添加事件的方式,直接在html的属性中写JS代码 Div1 Element Div1 Element ...

  9. 正则表达式、事件调用

    正则表达式可解决的问题 表单验证:<form></form>   表单 去空验证,对比验证:范围验证:固定格式验证: 正则表达式书写规则:               / 中间 ...

最新文章

  1. 强化学习在携程酒店推荐排序中的应用探索
  2. opencv + python3 利用ros 的 cv_bridge 传送图像消息的一种替代方法
  3. 财务需要学python-8年老财务:财务分析学python就能提高效率?一半人是骗子
  4. 用java写一个日历_2017.12.2 用java做一个日历
  5. java程序发送邮件_用java程序发送邮件
  6. FastRCNN 训练自己数据集 (1编译配置)
  7. java设计模式之外观模式(门面模式)
  8. 理解并实施:GLBP(ccna200-120新增考点)
  9. 架构实战:(一)Redis采用主从架构的原因
  10. php中isset() , unnset(), empty()函数
  11. 什么是Viewport Meta(width详解)及在手机上的应用
  12. Android开发笔记(二)
  13. SLG手游Java服务器的设计与开发——架构分析
  14. HNOI2008 遥远的行星
  15. 【VC皮肤】SkinSharp 1.0.6.6的使用
  16. steam加速_Steam玩家试用追梦加速器后,怎么说?
  17. Unable to execute diff program: WinDiff 【SourceOffSite】
  18. java前后端分离怎么测试,前后端分离如何提高开发测试效率
  19. 【LeetCode】马三来刷题之 Reverse Vowels of a Stringm
  20. web前端不好找工作之web前端面试简历补救篇

热门文章

  1. kill bill 杀死比尔盖茨比尔克林顿在人心中的位置..
  2. Linux下安装配置EasyPR中文车牌识别系统
  3. token验证_Swagger中添加Token验证
  4. developer console 学习
  5. 系统模块——什么是系统模块、path 路径操作、相对路径VS绝对路径
  6. Python 技巧篇-字符串灵活处理:字符串过滤、字符串拼接,字符串切片,特殊、超长字符串的处理实例演示
  7. 【生活】1024,快乐
  8. [YTU]_2633( P3 数钱是件愉快的事)
  9. buildPyramid函数
  10. python pywin32 微信_python win32con安装_python-2.7 – 安装pywin32