我有一个Web角色在后台线程中进行一些后台处理。
我想运行多个Web角色实例,但我只希望其中一个实例处理后台作业。如果运行后台处理的指定实例由于某种原因停止工作,我希望另一个实例取代它。
在Azure中实现此功能的最简单方法是什么?
我考虑过定期检查Instances
中Role
对象的RoleEnvironment.Roles
集合,并且仅在当前实例具有最小Id时运行后台线程(或者与其他实例确定)启发式),因此只有一个实例可以处理后台作业
这种方法应该有效吗?角色实例是否在彼此之间传达心跳,Instances
集合是否会相应更新?
答案 0 :(得分:1)
您可以尝试使用blob lease mechanism来控制您的实例。
你的所有实例都试图获得一个锁,第一个获得它。其余的是后退并稍后检查。处理实例可以续订锁定。这样,如果您的处理实例将失败(甚至是硬故障),租约将在租约时间过后释放,下一个实例可以获取锁定并开始处理。
如果您依赖Instance
最小的ID,那么您的实例可能会在您的实例启动并运行但后台处理线程被挂起/终止的情况下结束。