将记录添加到数据库后的特定时间触发WebJob

问题描述 投票:3回答:3

我想在使用.NET将记录添加到数据库后24小时触发Azure Webjob。显然,Webjob将在指定的时间处理多个任务。有没有一种方法(在.NET的Azure库中)可以安排此任务?

我可以自由使用消息队列,但是我想尝试避免不必要地轮询WebJob以获取新消息。

c# azure azure-webjobs
3个回答
1
投票

由于在此处将记录添加到数据库的事件是触发器,因此您可以使用Azure管理库来创建Azure调度程序作业,该作业将在插入db记录后的24小时后执行。 Azure Scheduler作业只能执行3件事:发出HTTP / HTTPS请求或将消息放入队列。由于您不想轮询队列,因此有两个选项

  1. 将现有的Web作业作为Wep API部署,每个任务都可以通过唯一的URL进行访问,以便调度程序任务可以执行正确的HTTP / HTTPS请求

  2. 创建一个新的WebAPI / Wep API,它接受接受请求(就像中间人一样,并再次使用Azure管理库按需编程运行现有Web作业。

请让我知道这些策略是否有帮助。


4
投票

如果要在SQL数据库中插入记录后24小时触发WebJob的执行,我绝对会为此使用Azure队列。因此,在插入记录后,只需在队列中添加一条消息即可。

为了执行此操作,您可以轻松利用可以传递给initialVisibilityDelay方法的CloudQueue.AddMessage()属性。在您的情况下,这将使该消息在24小时内不可见,然后看来将由您的Webjob处理。您无需计划任何事情,只需让Continuous 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
投票

要从您的网站中调用WebJob,不是一个好主意,而是您可以在您的网站内添加WebJob代码并直接调用该代码。您仍然可以从网站内部轻松使用WebJob SDK。

https://github.com/Azure/azure-webjobs-sdk-samples

我们不建议从您的网站调用WebJob,因为该调用包含您宁愿不存储在您的网站上的秘密(部署凭据)。

推荐:要分隔WebJob和网站代码,最好的办法是使用queue进行通信,WebJob监听queue,然后网站将请求推送到queue

© www.soinside.com 2019 - 2024. All rights reserved.