我想在使用.NET将记录添加到数据库后24小时触发Azure Webjob。显然,Webjob将有多个任务在他们指定的时间处理。有没有办法(在Azure Library for .NET中)我可以安排这项任务?
我可以自由使用消息队列,但我想尝试避免对新消息进行不必要的WebJob轮询。
答案 0 :(得分:3)
如果要在SQL数据库中插入记录24小时后触发WebJob的执行,我肯定会使用Azure队列。因此,在插入记录后,只需向队列添加一条消息。
为了做到这一点,您可以轻松利用可以传递给initialVisibilityDelay
方法的CloudQueue.AddMessage()
属性。这将使邮件在您的情况下24小时不可见,然后它将显示由您的Webjob处理。您不必安排任何事情,只需让连续WebJob监听正在运行的队列。
以下是一些示例代码:
public void AddMessage(T message, TimeSpan visibilityDelay)
{
var serializedMessage = JsonConvert.SerializeObject(message);
var queue = GetQueueReference(message);
queue.AddMessage(new CloudQueueMessage(serializedMessage), null, visibilityDelay);
}
private static CloudQueue GetQueueReference(T message)
{
var storageAccount = CloudStorageAccount.Parse("Insert connection string");
var queueClient = storageAccount.CreateCloudQueueClient();
var queueReference = queueClient.GetQueueReference("Insert Queue Name");
queueReference.CreateIfNotExists();
return queueReference;
}
希望这有帮助
答案 1 :(得分:1)
由于将记录添加到数据库的事件是此处的触发器,因此您可以使用Azure管理库创建Azure Scheduler作业,以便在插入db记录24小时后执行。 Azure Scheduler作业只能执行以下三项操作:发出HTTP / HTTPS请求或将消息放入队列中。由于您不想轮询队列,因此这里有两个选项
将现有Web作业部署为Wep API,其中每个任务都可通过唯一URL访问,以便调度程序任务可以执行正确的HTTP / HTTPS请求
创建一个新的WebAPI / Wep API,它接受请求(就像中间人一样),并按需使用Azure管理库按需编程运行现有的Web作业。
如果这些策略有任何帮助,请告诉我。
答案 2 :(得分:1)
要从您的网站调用WebJob,不是一个好主意,而是您可以在您的网站中添加WebJob代码并简单地调用该代码。您仍然可以从您的网站内轻松使用WebJob SDK。
https://github.com/Azure/azure-webjobs-sdk-samples
我们不建议从您的网站调用WebJob,因为调用包含一个秘密,而不是存储在您的网站上(部署凭据)。
<强>建议强>: 要分离WebJob和网站代码,最好的办法是使用队列进行通信,WebJob会侦听队列,并且网站会将请求推送到队列强>