首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Azure Webjob计时器触发器不触发

Azure Webjob计时器触发器不触发
EN

Stack Overflow用户
提问于 2016-10-28 00:14:46
回答 3查看 3.3K关注 0票数 3

我们有两个使用TimerTrigger运行的Azure We作业的部署(Prod和Test)。这两个网络应用程序都有一个实例。根据这篇文章的说法,TimeTriggers使用单例锁来确保没有并行调用。这两个实例使用相同的存储帐户。我们面临的问题是,只有一个部署似乎获得了锁,而另一个则无法获得锁。如果我们停止第一个网络作业,第二个获得锁并开始处理,反之亦然。

锁是否依赖于存储帐户?我们如何确保这两个部署都有单独的锁定机制,同时运行?

EN

Stack Overflow用户

回答已采纳

发布于 2016-10-28 02:31:19

你说得对,你必须使用不同的存储帐户。

来自文档

在幕后,TimerTrigger使用WebJobs SDK的Singleton特性来确保在任何给定时间只运行一个触发函数实例。在启动JobHost时,对每个TimerTrigger函数都使用blob租约( Singleton )作为。这个不信任的锁确保在任何时候只运行调度函数的单个实例。如果该函数的blob当前未被租用,则该函数将获得租约并立即开始按计划运行。如果不能获得blob租约,通常意味着该函数的另一个实例正在运行,因此该函数不会在当前主机中启动。当发生这种情况时,主机将继续定期检查是否可以获得租约。这是一种“恢复”模式,以确保在运行稳定状态时,如果一个实例发生故障,另一个实例会注意到另一个实例停止的地方。

如果您查看锁定机制(StorageScheduleMonitor.cs)的实现:

  • 作业在容器内获得一个锁(blob)。
  • blob位于特定目录中(基于HostId)。
  • blob的名称是不可配置的。

因此,基于@volodymyr-bilyachat的回答,有两种可能性:

  • 拥有独立的存储帐户:如果您在每个环境中都有一个存储帐户(dev/暂存/prod)
  • 指定HosId类的JobHostConfiguration属性: var config =新的JobHostConfiguration();config.HostId =“dev_‘_
票数 15
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40296109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档