代码之家  ›  专栏  ›  技术社区  ›  Sam

在.NET Core中以设置间隔运行的具有DI的WebJobs

  •  0
  • Sam  · 技术社区  · 6 年前

    我已经有了一个在.NET Core 2.1中创建的WebJob,它也使用 DI . 这个特定的WebJob将持续运行,我正在尝试创建的新WebJob将以设置的间隔运行。

    在下面的代码中,我告诉WebJob要连续运行,并需要删除这些行,但我想确保我做得对。我正在把//REMOVE放在需要删除的行上。有人能证实我做得对吗?

    同样,这个想法是创建一个WebJob,它将以设置的间隔运行,因此我需要删除表示一个持续运行的WebJob的行。

    static void Main(string[] args)
    {
         IServiceCollection serviceCollection = new ServiceCollection();
         ConfigureServices(serviceCollection);
    
         var configuration = new JobHostConfiguration();
         configuration.Queues.MaxPollingInterval = TimeSpan.FromSeconds(1); // REMOVE
         configuration.Queues.BatchSize = 1; // REMOVE
         configuration.JobActivator = new CustomJobActivator(serviceCollection.BuildServiceProvider());
         configuration.UseTimers();
    
         var host = new JobHost(configuration);
         host.RunAndBlock(); // REMOVE
    }
    
    private static void ConfigureServices(IServiceCollection services)
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();
    
        // Resolve repositories
        services.AddTransient<IMyRepository, MyRepository>();
    
        // Create instances of clients
        services.AddSingleton(new MyCustomClient(configuration));
    
        // Azure connection strings for the WebJob
        Environment.SetEnvironmentVariable("AzureWebJobsDashboard", configuration.GetConnectionString("WebJobsDashboard"));
        Environment.SetEnvironmentVariable("AzureWebJobsStorage", configuration.GetConnectionString("WebJobsStorage"));
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Joey Cai    6 年前

    我正在把//REMOVE放在需要删除的行上。有人能证实我做得对吗?

    不过,要删除的代码行无法告诉webjob以设置的间隔运行。

    config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(1);
    

    MaxPollingInterval是Web作业检查队列的最长时间。如果队列为空,则WebJob将开始较少的检查,最多检查10分钟。

    config.Queues.BatchSize = 2;  //the amount of items your WebJob will process at the same time 
    

    有关更多详细信息,请参阅本文 webjob JobHostConfiguration .

    使用Azure WebJobs SDK时,可以使用 TimerTrigger 声明作业函数 run on a schedule .

    public static void StartupJob(
    [TimerTrigger("0 0 */2 * * *", RunOnStartup = true)] TimerInfo timerInfo)
    {
        Console.WriteLine("Timer job fired!");
    }
    

    你可以得到 计时装配工 以及通过安装 Microsoft.Azure.WebJobs.Extensions nuget包。
    使用TimerTrigger时,请确保添加一个调用 config.UseTimers() 注册扩展名的启动代码。

    config.UseTimers();  //allows us to use a timer trigger in our functions.
    

    使用Azure WebJobs SDK时,将代码部署到一个连续的WebJob,其中 永远的 启用。然后,您可以在该WebJob中添加许多所需的预定功能。