将记录添加到数据库后在特定时间触发 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 请求或将消息放入队列。由于您不想轮询队列,这里有两个选项
将现有的 Web 作业部署为 Wep API,其中每个任务都可以通过唯一的 URL 访问,以便调度程序任务可以执行正确的 HTTP/HTTPS 请求
创建一个新的 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;
}
希望对您有所帮助
我想在使用 .NET 将记录添加到数据库后 24 小时触发 Azure Webjob。显然,Webjob 将在指定时间处理多个任务。有没有一种方法(在 .NET 的 Azure 库中)可以安排此任务?
我可以自由使用 Message Queues ,但我想尝试避免对 WebJob 进行不必要的新消息轮询。
由于向数据库添加记录的事件是此处的触发器,您可以使用 Azure 管理库创建一个 Azure 调度程序作业,以便在插入数据库记录后 24 小时后执行。 Azure 调度程序作业只能做 3 件事:发出 HTTP/HTTPS 请求或将消息放入队列。由于您不想轮询队列,这里有两个选项
将现有的 Web 作业部署为 Wep API,其中每个任务都可以通过唯一的 URL 访问,以便调度程序任务可以执行正确的 HTTP/HTTPS 请求
创建一个新的 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;
}
希望对您有所帮助