【问题标题】:Azure timertriggered webjob hangs randomlyAzure timertriggered webjob 随机挂起
【发布时间】:2018-08-12 09:02:09
【问题描述】:

我想安排一个 timertriggered 方法来调用其他方法,但是如果我用它来调用我自己的方法之一,CronJob 方法将不会运行,我只是得到这个控制台输出: " 发现以下功能: ...进程队列消息 ...函数.CronJob 作业主机已启动 "

几分钟后什么都没有发生,然后它可能会突然开始工作。但如果我只使用 CronJob() 方法运行它自己的 Console.WriteLine("Timer job failed") 语句,一切正常。

几个小时以来,我一直在努力寻找解决这个问题的方法,但似乎没有人遇到同样的问题。关于我做错了什么的任何想法?

public static void CronJob([TimerTrigger("*/3 * * * * *", RunOnStartup = true)] TimerInfo timerInfo)
    {
        Console.WriteLine("Timer job fired! ");
        DoTask();

    }

    private static void DoTask()
    {
        Console.WriteLine("Doing task...");
    }

主要方法:

static void Main()
    {
        var config = new JobHostConfiguration();

        if (config.IsDevelopment)
        {
            config.UseDevelopmentSettings();
        }

        var host = new JobHost(config);
        config.UseTimers();
        // The following code ensures that the WebJob will be running continuously
        host.RunAndBlock();
    }

【问题讨论】:

  • 我们可以在 Program.cs 中查看您的静态 void Main() 函数吗?
  • 是的,已将其添加到主帖
  • 在本地运行、在 Azure Web 应用实例上运行或同时在这两种情况下运行时,您是否遇到过这些问题?
  • 至少在本地运行时它一直在发生。编辑:两者都发生
  • 您能否将 JobHostConfiguration.Tracing.ConsoleLevel 设置为 Verbose,看看这是否能说明问题?我想知道您是否没有遇到 TimerTrigger 单例锁的问题。

标签: c# azure scheduled-tasks azure-webjobs


【解决方案1】:

关于我做错了什么有什么想法吗?

根据您的描述,与是否直接调用代码无关。根本原因是 Blob 租约(Singleton Lock)的默认时间为 30 秒。

正如 Rob Reagan 提到的,您可以设置 JobHostConfiguration.Tracing.ConsoleLeve 详细。当网络作业挂起时,您会得到信息“无法获取单例锁”

更多详细信息可以参考issue

当侦听器针对特定的 TimerTrigger 函数启动时,会使用一个 blob 租约(单例锁),默认时间为 30 秒。这是确保在任何时候只有一个计划函数实例在运行的锁。 如果您终止您的控制台应用程序,该租约仍将保留,直到它自然到期

【讨论】:

  • 非常感谢您的帮助,该链接也非常有用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 2017-09-18
相关资源
最近更新 更多