gpt4 book ai didi

azure - 使用 CurrentRoleInstance.Id 仅在一个实例中运行任务

转载 作者:行者123 更新时间:2023-12-02 02:17:39 27 4
gpt4 key购买 nike

在您在多个实例上部署 Web 角色并需要安排一项仅应由一个实例完成的任务(例如向站点管理员发送包含一些统计信息的电子邮件)的情况下,使用它的可靠性如何RoleEnvironment.CurrentRoleInstance.Id 以使任务仅在一个实例上运行(例如仅在 Id 以 IN_0 结束时运行它)?如果有人曾经这样做过,我会对他的反馈感兴趣。

最佳答案

我不会使用实例 ID。如果实例 0 重新启动(每月至少发生一次)会发生什么?现在您的调度程序或任务运行程序已离线。

另一种解决方案是使用跨实例的互斥体类型。我想到的是一团租赁。实际上,您可以获取用于写入的 blob 的租约(并且只能有一个租约持有者)。您可以在运行任务之前尝试获取 blob 租约。如果得到它,运行任务。如果不这样做,请不要运行它。

略有不同:在线程中(假设从您的 Run() 方法开始),尝试获取租约,如果成功,则启动调度程序任务(可能是线程或其他任务)。如果您无法获得租约,请休息一分钟,然后重试。最终,具有租约的实例将重新启动(或者它会因其他原因消失)。几秒钟后,另一个实例将获取废弃的租约并启动新的调度程序任务。

史蒂夫马克思写了一个blog post关于使用租约的并发性。泰勒·多尔克森 (Tyler Doerksen) 也有一个 good post关于租赁。

关于azure - 使用 CurrentRoleInstance.Id 仅在一个实例中运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9715504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com