【问题标题】:Customize azure webjob schedule timing for different users为不同用户自定义 azure webjob 计划时间
【发布时间】:2016-06-29 07:55:30
【问题描述】:

目前我有一个 azure webjob,它由 azure scheduler 每 2 小时静态触发一次。但我需要根据我网站中的每个用户配置动态安排时间。因为除了安排执行时间之外,所有用户的功能都是相同的,我可以'不要去寻找新的 webjobs。我查看了带有参数 cron 值的 azure 队列,但我不知道如何实现上述案例。

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

【问题讨论】:

  • 你能更详细地描述你的场景吗?
  • 是的,我们需要更多关于您尝试实现的目标的信息,可能有多种方法

标签: azure customization scheduler azure-webjobs


【解决方案1】:

只要 1 分钟的粒度没问题(并且您的网站设置为 Always On),我会使用 WebJobs SDK Extension TimerTrigger 而不是计划的网络作业。

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

  1. 在某处有一个表或数据存储来跟踪代码上次为用户运行的时间,并在需要再次运行时进行设置
  2. 将检查 #1 中数据存储的 TimerTrigger 设置为每分钟运行一次,并查看是否需要运行任何内容,如果需要,则将消息放入队列并返回
  3. 有另一个函数来监听该队列,计时器触发器刚刚使用 QueueTrigger 向其中发送了一条消息,并执行您当前正在执行的任何处理。

这应该允许您的用户拥有自己的日程安排并让这些日程安排触发代码。

更新: 下面是一个使用 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);
    }
}

}

【讨论】:

  • 谢谢。这是我需要的。如果您包含有关计时器触发器和队列触发器的更多信息,那将是很好的增值内容。无论如何感谢您的想法。它应该适用于我的情况。跨度>
  • 我更新了答案以包含计时器和队列触发器的示例。我还创建了一个动手实验室,涵盖了 4 月的队列和其他触发器,并且将为您提供比我可以在此处输入的更多信息。代码和分步演练位于 github 上:github.com/JasonHaley/BostonAzureBootcamp2016Material HOL-WebJobs/End/OrderProcessingJob 是代码,文档是 AzureBootCampWebJobsHOL.pdf。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多