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

Trigger WebJob at a particular time after record added to a database

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

我可以自由使用 Message Queues ,但我想尝试避免对 WebJob 进行不必要的新消息轮询。

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

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

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

如果这些策略有帮助,请告诉我。

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

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

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

推荐: 要将 WebJob 和网站代码分开,最好的办法是使用 queue 进行通信,WebJob 在 queue 上侦听并且网站推送请求到 队列

如果您想在 SQL 数据库中记录插入后 24 小时触发 WebJob 的执行,我肯定会为此使用 Azure 队列。所以插入记录后,只需向队列中添加一条消息即可。

为此,您可以轻松利用可以传递给 CloudQueue.AddMessage() 方法的 initialVisibilityDelay 属性。在您的案例中,这将使该消息在 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;
}

希望对您有所帮助