为不同用户定制azure webjob计划时间

时间:2016-06-24 04:31:50

标签: azure customization scheduler azure-webjobs

目前我正在使用azure webjob,这是由azure调度程序每2小时静态触发一次。但我需要根据我的网站中的每个用户配置动态调度时间。因为除了计划执行时间以外所有用户的功能相同我可以我去寻找新的webjobs.I查看了带有参数cron值的azure队列,但我没有任何线索如何实现上述情况。

请解释如何为不同用户自定义azure webjob计划时间。

2 个答案:

答案 0 :(得分:0)

Azure调度程序无法根据用户触发。

您可能需要连续运行的Web作业,该作业需要根据用户特定的计划运行。您必须将用户特定的计划存储在表/配置/文件中。阅读这些计划并仅在满足计划条件时运行作业。或者您可以使用服务总线来触发Web作业。您的服务总线必须根据用户计划触发。

答案 1 :(得分:0)

只要1分钟的粒度很好(并且您的站点设置为Always On),我将使用WebJobs SDK Extension TimerTrigger而不是计划的webjob。

然后您可以执行以下操作:

  1. 在某个地方设置一个表或数据存储,用于跟踪用户上次运行代码的时间,并在需要再次运行时进行设置
  2. 设置检查#1中数据存储的TimerTrigger每分钟运行一次,看是否需要运行,如果是 - 然后在队列中抛出一条消息并返回
  3. 有另一个侦听该队列的函数,定时器触发器只是使用QueueTrigger抛出一条消息并执行您当前正在执行的任何处理。
  4. 这应该允许您的用户拥有自己的计划并让这些计划触发代码。

    <强>更新 以下是使用Timer和Queue触发器的生产者/消费者模型的简单示例:

    using Microsoft.Azure.WebJobs;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ProducerConsumer
    {
        class Program
        {
            static void Main(string[] args)
            {
                var config = new JobHostConfiguration();
    
            config.UseDevelopmentSettings();
            config.UseTimers();
    
            var host = new JobHost(config);
            host.RunAndBlock();
        }
    }
    
    public static class Functions
    {
        public static int counter = 0;
    
        // Create a new message on the "orders" queue every 10 seconds
        public static void Producer(
            [TimerTrigger("00:00:10", RunOnStartup=true)] TimerInfo timer,
            [Queue("orders")] out string messageCount,
            TextWriter log)
        {
            messageCount = "message" + counter++;
    
            log.WriteLine("messsage: " + messageCount);
        }
    
        // Watch the "orders" queue for messages, and when one is found save it to blob storage
        public static void Consumer(
            [QueueTrigger("orders")] string message,
            [Blob("orders/order.txt")] out string order,
            TextWriter log)
        {
            order = message;
    
            log.WriteLine("Received " + message);
        }
    }
    

    }