gpt4 book ai didi

c# - 在 Quartz.NET 中调度高 CPU 负载的作业

转载 作者:行者123 更新时间:2023-11-30 15:42:00 27 4
gpt4 key购买 nike

我正在使用 Quartz.NET 来安排一个作业,该作业从外部源加载大量数据并保存在数据库中。下载它们之后,还必须对它们进行一些处理,这将在数据库的不同表中创建额外的记录。

下载器作业是有状态作业,每分钟运行一次。我遇到的问题是,下载数据后,处理部分的时间可能比我预期的要长得多。

我应该如何管理它?我已经考虑过在数据下载完成后创建另一个作业(只运行一次)。在这种情况下,下载器作业可以每分钟运行一次(这是最初的计划),因为下载部分只需要 5-20 秒,而另一个作业可以在下载器完成后处理这些记录。处理器作业将从数据库中获取标记为未处理的记录,并对它们进行处理。

这是处理处理的正确方法吗?我的另一个想法是建立一个 WCF 服务来处理一个下载的元素。这将在每个下载的元素上调用。但是,我认为这不会比其他工作方法表现得更好。

最佳答案

也许更好的方法应该是将作业用作事件,并让另一个服务执行下载。

作业只会将定义意图的消息发送到另一个端点。

这在具有某种消息代理或服务总线(如 NServiceBus 或 MassTransit)的事件驱动架构中非常常见。

这样您的调度程序将保持精简和可扩展。

这是一个例子:

public class DownloadFileJob : IJob
{
public IBus Bus { get; set; }
public ILogger Logger{ get; set; }

public void Execute(IJobExecutionContext context)
{
Bus.Send(new DownloadFileMessage());
Logger.Info("Sending message requesting download of file.");
}
}

关于c# - 在 Quartz.NET 中调度高 CPU 负载的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com