如何在 ASPNET 样板中编写有状态的后台作业
How to write a stateful background job in ASPNET Boilerplate
我有一个 ASPNET 样板项目,其后台作业是这样编写的:
public class MyJob : BackgroundJob<MyJobInput>, ITransientDependency
{
public MyJob()
{
}
[UnitOfWork]
public override void Execute(MyJobInput input)
{
// Create the TFS release and wait for it to complete
}
}
此作业在 TFS 中启动长版本并等待它完成。问题是,如果作业启动 TFS 版本并在一段时间后重新启动后端服务器,作业将重新启动并创建一个新版本。
我想做的是让后台作业通过从作业输入数据中读取版本 ID 来恢复之前启动的 TFS 版本(如果有的话)。
这要求我应该被允许更新 AbpBackgroundJobs
.JobArgs
字段中的数据。
有什么办法吗?这是 ABP 设计允许的吗?
谢谢
您可以将状态保存在临时数据库或文件中。因此,当您的发布正在进行时,请保存每一步。当服务重新启动时,首先从持久化数据中读取以检查您的上次发布状态。如果它已损坏,则继续,如果不是从您的新版本开始。
我 "fixed" 这个问题在将后台作业排入队列并将发布 ID 放入作业输入之前启动 TFS 版本。该工作现在只负责跟踪 运行 发布,如果发现 none 则不开始发布。
我有一个 ASPNET 样板项目,其后台作业是这样编写的:
public class MyJob : BackgroundJob<MyJobInput>, ITransientDependency
{
public MyJob()
{
}
[UnitOfWork]
public override void Execute(MyJobInput input)
{
// Create the TFS release and wait for it to complete
}
}
此作业在 TFS 中启动长版本并等待它完成。问题是,如果作业启动 TFS 版本并在一段时间后重新启动后端服务器,作业将重新启动并创建一个新版本。
我想做的是让后台作业通过从作业输入数据中读取版本 ID 来恢复之前启动的 TFS 版本(如果有的话)。
这要求我应该被允许更新 AbpBackgroundJobs
.JobArgs
字段中的数据。
有什么办法吗?这是 ABP 设计允许的吗?
谢谢
您可以将状态保存在临时数据库或文件中。因此,当您的发布正在进行时,请保存每一步。当服务重新启动时,首先从持久化数据中读取以检查您的上次发布状态。如果它已损坏,则继续,如果不是从您的新版本开始。
我 "fixed" 这个问题在将后台作业排入队列并将发布 ID 放入作业输入之前启动 TFS 版本。该工作现在只负责跟踪 运行 发布,如果发现 none 则不开始发布。