使用 Azure WebApps,我知道我可以通过添加以下内容使 WebJob 成为单例"is_singleton": true
到网络作业settings.job
例如,如果我在单个 WebApp 部署中有 3 个实例,那么这非常有用。
但是 - 我如何发布到两个 Web 应用程序(用例,两个不同的区域)并使 WebJob 作为单例运行并且仅在其中一个部署上运行。
期望行为的示例:
悉尼部署
- 我的单例网络作业(正在运行)
- 我处理队列的其他 WebJobs(正在运行)
新加坡部署
- 我的 Singleton Webjob(未运行,或者甚至未部署?)
- 我处理队列的其他 WebJobs(正在运行)
我知道我可以登录到 azure 门户并禁用其中一个部署中的 Web 作业,但是我可以对 Visual Studio 中的发布配置文件进行转换或更改以自动实现所需的行为吗?
我目前正在使用 Visual Studio 2015 进行部署。
实际上,有一个非常方便的 Singleton 属性,在您的用例中可能很有用,看看这个 https://github.com/Azure/azure-webjobs-sdk/wiki/Singleton,摘录如下;
WebJobs SDK 通过其 SingletonAttribute 促进常见的分布式锁定场景。您可以简单地将 SingletonAttribute 应用于作业函数,以确保该函数的所有调用都将被序列化,即使跨扩展的实例也是如此。
[Singleton]
public static async Task ProcessImage([BlobTrigger("images")] Stream image)
{
// Process the image
}
还有一个示例说明如何将单例范围缩小到一个区域:
您可以在单例上指定范围表达式/值,这将确保该范围内函数的所有执行都将被序列化。
[Singleton("{Region}")]
public static async Task ProcessWorkItem([QueueTrigger("workitems")] WorkItem workItem)
{
// Process the work item
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)