为 Hangfire 后台作业提供复杂状态

Supplying complex state to Hangfire background job

我正在编写一个 ASP.NET Core REST API returns 201s 和 202s 在使用 Hangfire 启动长时间的 运行ning 异步作业之后。如果作业在中途失败,Hangfire 将重新拾起,运行 重试等。显然,为了这样做,它需要知道一些状态。

Hangfire 建议保留后台作业的参数 "small and simple",如果后台作业需要一些更复杂的对象来将 ID 写入数据库。

我的后台作业需要几个 API 密钥、密码、一些不太容易序列化的对象,以及一些通过内部通用配置库作为配置加载的 YAML 文件。由于这些数据的敏感性,我宁愿不将它们写入数据库。我在这里看到的选项有两个:

  1. 将每个 piece 较大的对象作为参数传递给 Hangfire 作业,并让 Hangfire 将它们序列化到它的数据库中。对于 API 密钥和密码等敏感参数,首先使用与应用程序捆绑在一起的证书对其进行加密。后台作业在开始 运行ning.
  2. 时必须在从数据库中获取它们后使用相同的证书对其进行解密
  3. 启动时在 public static class 中将对象设置为某些 public static 属性。后台作业可以在需要时参考它。例如:
// Startup code simplified for the sake of the example
{
    var envConfigs = new EnvironmentConfiguration( ... a bunch of random stuff ... );
    service.AddSingleton(envConfigs);
    EnvironmentConfiguration.Instance = envConfigs;
}


// Hangfire job

{    
    var result = BusinessLogicDoerMethod(EnvironmentConfiguration.Instance.BusinessLogicInformation);
}

选项 1 很烦人,因为我们必须传递 很多 个参数,并且还必须处理加密/解密逻辑。

选项 2 可能没问题,我在这里看到的危险是如果一个后台作业改变了 EnvironmentConfiguration 对象,其他作业和应用程序的其余部分也会看到该突变。但是,我可以通过简单地不这样做来轻松解决这个问题。

没有选择.. 只是根据 https://docs.hangfire.io/en/latest/background-methods/passing-dependencies.html

使用 DI