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