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

本文关键字:定时间 WebJob 记录 添加 数据库 | 更新日期: 2023-09-27 18:06:54

我想在使用。net向数据库添加记录后24小时触发Azure Webjob。显然,Webjob需要处理多个任务,所有任务都在指定的时间内完成。有没有一种方法(在。net的Azure库中)我可以安排这些任务?

我可以自由地使用消息队列,但我想尽量避免WebJob为新消息进行不必要的轮询。

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

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

为了做到这一点,您可以轻松地利用可以传递给CloudQueue.AddMessage()方法的initialVisibilityDelay属性。在您的情况下,这将使消息在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;
}

希望能有所帮助

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

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

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

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

从您的网站调用WebJob,这不是一个好主意,而不是您可以在您的网站中添加WebJob代码并简单地调用该代码。你仍然可以很容易地在你的网站中使用WebJob SDK。

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

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

推荐

:为了分离WebJob和Website代码,最好的方法是使用队列进行通信,WebJob监听队列,而Website将请求推送到队列