【问题标题】:How to write a stateful background job in ASPNET Boilerplate如何在 ASPNET Boilerplate 中编写有状态的后台作业
【发布时间】:2018-07-11 10:48:24
【问题描述】:

我有一个 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 是否允许这样做?

谢谢

【问题讨论】:

    标签: asp.net-core aspnetboilerplate


    【解决方案1】:

    您可以将状态保存在临时数据库或文件中。因此,当您的发布正在进行时,请保存每一步。当服务重新启动时,首先从持久数据中读取以检查您的最后发布状态。如果它已损坏,则如果没有从新版本重新开始,则继续。

    【讨论】:

    • 嗨@Alper,感谢您的回复。我一直在寻找一种工作量更少、更集中的解决方案。请记住,目前样板作业已经从 AbpBackgroundJobs.JobArgs 字段中读取输入数据,因此更新该字段而不是启动一种新的持久性方法会花费更少
    【解决方案2】:

    在将后台作业排入队列并将发布 ID 放入作业输入之前,我“修复”了启动 TFS 版本的这个问题。该作业只负责跟踪当前正在运行的版本,如果没有找到则不启动版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2017-11-30
      • 2019-09-07
      相关资源
      最近更新 更多