在webrole的RoleEntryPoint.OnStart方法中等待/睡眠是一个好习惯吗?在我们告诉Azure我们已准备好提供服务请求之前,我们希望确保我们的服务完全就绪。
答案 0 :(得分:3)
是的,您可以在OnStart方法中等待一段时间来初始化服务。
OnStart执行系统初始化。如果您在进入角色的运行状态之前需要设置和初始化服务,则需要在退出该方法之前在OnStart中初始化该服务。
在退出OnStart后,角色环境将继续调用RoleEntryPoint的Run方法。调用下一个方法所需的确切时间是未知的。这也会将您的服务从RoleInstanceStatus.Busy移至RoleInstanceStatus.Ready,此时角色实例将开始接收流量。
据我所知,角色实例没有初始化超时。 (另一方面,OnStop方法,当您的实例出于某种原因关闭时,由于实际原因,确实只有有限的时间来完成执行。不确定,但有一次我听到五或十五秒。)
答案 1 :(得分:1)
据我所知,当在OnStart内部时,角色状态将处于Busy状态,这意味着它向Fabric Controller报告它仍处于初始化阶段。我不认为在OnStart中睡觉是好事还是坏事,但您可能需要考虑角色启动超时。
我认为更好的想法是将你的等待逻辑放入Run中并使用一些标志,这样在准备好之前它就无法接受请求。
答案 2 :(得分:1)
OnStart方法的目的是在其中执行所有初始化。因此,在此函数退出后,您的实例应该完全正常运行。在你的情况下,我认为在OnStart中稍等一下是件好事。在此期间,角色将处于“忙碌”状态,不会收到任何传入的Web请求,但仍可以与存储和数据库进行通信。
在我们的项目中,我们让OnStart从Blob存储中下载所有必要的数据,解压缩并注册它。然后我们检查该角色是否健康,然后才离开OnStart方法。