Azure WebJobs SDK 3.0中'Settings.job'和'TimerTrigger'有什么区别?

问题描述 投票:1回答:2

[许多教程使用以下代码通过WebJob SDK 3.0库创建Webjob。特别是'TimerTrigger'

    public void DoSomethingUseful([TimerTrigger("0 */1 * * * *", RunOnStartup = false)] TimerInfo timerInfo, TextWriter log)
    {
        // Act on the DI-ed class:
        string thing = _usefulRepository.GetFoo();
        Console.WriteLine($"{DateTime.Now} - {thing}");
    }

上面的示例应每1分钟将此方法作为网络作业运行一次。但是,这不起作用。

[当包含setting.job文件时,我设法使webjob正常工作。

setting.job: {  "schedule": "0 */1 * * * *" }

我的问题是这两者之间有什么区别?

azure-webjobs
2个回答
5
投票

更新:

请转到azure webjobs日志,然后您可以看到它实际上已按照SDK定义的timerTrigger运行(即使Schedule为n / a,并且settings.job为空,也没有关系:]]

enter image description here

简而言之,当使用webjob sdk 3.x时,您可以根据定义的时间使用TimerTrigger属性运行该功能。无需使用webjobs SDK(例如使用.zip文件或从Visual Studio中发布控制台项目),就可以使用setting.job来定义计时器,而不是使用TimerTrigger属性。

1。使用webjobs SDK 3.x进行计时器触发时,应添加以下代码行:config.AddTimers();

这是我使用webjobs SDK 3.x(这是在Visual Studio中创建的.net核心2.2控制台项目)的代码:

具有最新版本的软件包:Microsoft.Azure.WebJobs /Microsoft.Azure.WebJobs.Extensions/ Microsoft.Extensions.Logging.Console

Program.cs中的代码:

    class Program
    {
        static void Main(string[] args)
        {
            var builder = new HostBuilder()
                .ConfigureWebJobs(config =>
                {
                    config.AddTimers();
                    config.AddAzureStorageCoreServices();
                })
                .ConfigureLogging((context, b) =>
                {
                    b.AddConsole();
                }
                )
                 .Build();

            builder.Run();
        }
    }

然后创建一个新文件,例如SayHelloWebJob.cs,并在其中进行编码:

    public class SayHelloWebJob
    {
        public void ProcessCollateFiles([TimerTrigger("0 */1 * * * *", RunOnStartup = false)]TimerInfo timerInfo,TextWriter writer)
        {
            writer.WriteLine("hi, it is a testing running");
            Console.WriteLine("test");
        }
    }

请注意,在appsettings.json文件中,添加您的存储连接字符串,如下所示:

{
  "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=xxx;EndpointSuffix=core.windows.net"
}

然后运行项目,您可以看到每1分钟触发一次功能:

enter image description here

2。对于设置作业,例如。如果您只是创建一个控制台项目,而不使用webjobs sdk。由于您没有使用webjobs sdk,因此无法使用timerTrigger属性。目前,您可以在此项目中包含settings.job文件(在其属性中,将“复制到输出目录”设置为“如果更新则复制”),并像在帖子中一样配置计划的计时器。作为Webjob发布后(从Visual Studio中发布,发布时,将“ Webjob运行模式”选择为“按需运行”),它可以按照您在settings.job中定义的计划运行。


0
投票

我一直在努力解决相同的问题。经过长时间的研究,这是我的理解。

© www.soinside.com 2019 - 2024. All rights reserved.