2011-04-22 57 views
4

之前的WorkerRole我以前曾使用过一些Windows服务,在遇到严重错误时可以自动停止。Windows Azure - 需要停止

将这些迁移到Windows Azure,在WorkerRole中,我想这样做:能够从停止执行WorkerRole

我只是遇到一个小问题...

运行方法结束, 的WorkerRole 调用OnStop方法被触发, 那么它的重新启动...... 从我我读过了,这是WorkerRole的一个正常行为。

然后我的问题是:如何分辨它工作完成后,不要重新启动,请

回答

2

我真的不知道这其实是可能的。 你可以使用

Thread.Sleep(Timeout.Infinite); 

但由于工人角色部署到云中,你仍然要付出,我认为真正停止停止,这是通过悬挂在Azure平台的整体作用的唯一途径。

+0

做这样的事情仍然会招致成本:成本是基于部署,而不是CPU周期或类似的实际数量的实例。 – tijmenvdk 2011-04-22 14:08:28

+0

成本不是我的问题。严重错误和重新启动是问题。 – Mose 2011-04-22 16:24:33

0

如果您的特定角色只使用单个实例,则可以通过管理API将该角色的实例计数降至0。切换特定角色不是受支持的功能,但您可以通过构建一个kill switch服务来使其工作,您可以调用特定实例并同时降低实例的数量。这需要一些管道代码,但是可行。

+1

您不能将实例计数设置为0.您只能暂停然后删除您的部署。对于需要角色仅在短时间内运行的任务(例如,每24小时运行一次),请考虑将其置于单独的部署中。 – 2011-04-22 14:26:21

+0

好点!你应该已经给你的评论一个答案,这样我可以upvote它:-)挂起和删除也可以通过管理API来完成,幸运的是。另一种方法是运行一个超小型的实例来降低成本。 – tijmenvdk 2011-04-22 14:49:35

+0

成本不是问题,我不希望任务运行一定的时间。我只是想避免执行引发严重错误的任务。我会搜索到API,如果它可以从一个辅助角色内被处决,如果它可以挂起自己^^ – Mose 2011-04-22 16:29:51

3

您无法停止特定的角色实例。你可以从3个实例缩小到1个,但你不能选择哪个终止。

如果您正在讨论需要启动,处理某些内容,然后关闭(例如,每天一次)的单实例工作者角色,请考虑将此角色移至自己的部署中。然后,使用管理API,部署它,让它运行一个小时(或无论你需要多长时间),然后暂停+删除它。

+0

就像我“遇到一个严重错误时”和“从内部”之称。我希望我的WorkerRole很聪明,而不是让操作员随时进行检查。 – Mose 2011-04-22 16:21:27

+0

如果你有一个基于队列的处理管道,您可以封装所有队列处理,如果有异常抛出,把排队的命令作为带毒邮件,从队列中删除,将其存储在一个表中或其他地方,并发送你自己留言进一步调查。 您也可以通过编程把你的情况下进行的负载平衡器,然后给自己发送便条。此时,您可以将RDP发送到实例来诊断问题所在。 – 2011-04-22 16:29:36

+0

有趣的工作方式,感谢分享。事实上,它不是一个管道,它是一个基于定期执行的不同任务的调度器。如果数据库在任务标记为完成时停止工作,则可能发生“严重错误”。这可能发生在非常严重的情况下,并且确实可能​​是一个问题。所以这是一个“极端”的案例,需要加以解决。停止调度程序进一步投资是我们目前对作为Windows Service的机器人所做的。你能告诉我如何“以编程方式将你的实例从负载均衡器中取出”吗? – Mose 2011-04-22 23:24:07

0

如果我正确地读你的问题....工人角色过程停止,但然后再次开始?

我遇到了问题,如果工作人员角色长时间运行,它基本上会重新启动。会发生什么情况是Azure假定在很长时间(通常为30秒)后,角色已挂起并将消息写回工作队列以确保完成该过程。

我在这里采取刺法,但是在您的方案中可能停止辅助角色不会导致消息从工作角色消息队列中被删除?如果是这样,您可能需要查看是否有方法明确删除正在处理的消息,然后再终止该流程。这里

http://guerillaprogrammer.com/jakew/post/2010/03/23/Expiring-Azure-Queue-Message.aspx

0

最近我遇到了同样的问题。 我的问题是通过评论工作者的角色部分来自ServiceConfiguration.Cloud.cscfg,ServiceConfiguration.Local.cscfg和ServiceDefinition.csdef中的文件和包装项目固定。