目前我正在使用azure webjob,这是由azure调度程序每2小时静态触发一次。但我需要根据我的网站中的每个用户配置动态调度时间。因为除了计划执行时间以外所有用户的功能相同我可以我去寻找新的webjobs.I查看了带有参数cron值的azure队列,但我没有任何线索如何实现上述情况。
请解释如何为不同用户自定义azure webjob计划时间。
答案 0 :(得分:0)
Azure调度程序无法根据用户触发。
您可能需要连续运行的Web作业,该作业需要根据用户特定的计划运行。您必须将用户特定的计划存储在表/配置/文件中。阅读这些计划并仅在满足计划条件时运行作业。或者您可以使用服务总线来触发Web作业。您的服务总线必须根据用户计划触发。
答案 1 :(得分:0)
只要1分钟的粒度很好(并且您的站点设置为Always On),我将使用WebJobs SDK Extension TimerTrigger而不是计划的webjob。
然后您可以执行以下操作:
这应该允许您的用户拥有自己的计划并让这些计划触发代码。
<强>更新强> 以下是使用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);
}
}
}