繁体   English   中英

使用Azure中的Web应用程序使用多个部署使Webjob成为单例

[英]Making a Webjob a singleton using multiple deployments using Web Apps in Azure

使用Azure WebApps,我知道我可以通过在WebJob settings.job文件中添加"is_singleton": true来使WebJob成为单例,如果我在单个WebApp部署中有3个实例,这将非常有用。

但是 - 如何发布到两个WebApp(用例,两个不同的区域)并使WebJob作为单例运行并且仅在其中一个部署上运行。


期望行为的示例:

悉尼部署

  • 我的Singleton Webjob(运行)
  • 我处理队列的其他WebJobs(正在运行)

新加坡部署

  • 我的Singleton Webjob(没有运行,或者甚至没有部署?)
  • 我处理队列的其他WebJobs(正在运行)

我知道我可以登录到azure门户并在其中一个部署中禁用Web作业,但是我可以对visual studio中的发布配置文件进行转换或更改以自动实现所需的行为吗?

我目前正在部署Visual Studio 2015。

实际上有一个非常方便的Singleton属性可能在你的用例中很有用, 看看这个 ,摘录如下;

WebJobs SDK通过其SingletonAttribute促进了常见的分布式锁定方案。 您可以简单地将SingletonAttribute应用于作业函数,以确保将序列化该函数的所有调用,即使在扩展的实例中也是如此。

[Singleton]
public static async Task ProcessImage([BlobTrigger("images")] Stream image)
{
     // Process the image
}

还有一个示例说明如何将Singleton范围缩小到某个区域:

您可以在Singleton上指定范围表达式/值,这将确保序列化该范围内函数的所有执行。

[Singleton("{Region}")]
public static async Task ProcessWorkItem([QueueTrigger("workitems")] WorkItem workItem)
{
     // Process the work item
}

从站点的角度来看,这些是两个完全独立的站点,因此其中的webjobs将彼此独立。 如果你想让它们成为单身,你必须添加一些自定义逻辑。

选项包括:

  1. 在两个站点之一中设置应用程序设置,并告诉webjob仅在设置该设置时才执行
  2. 使用Azure blob存储创建锁文件,获取锁的webjob是唯一可以运行的(这让你的webjob故障转移到第二个区域,第一个失败)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM