ABP后台作业在负载平衡下多次运行

时间:2018-12-06 10:22:11

标签: aspnetboilerplate

我们有一个由ABP开发的服务,它有一些后台作业,一些后台作业是由业务操作触发的,而某些后台作业是由计时器触发的。

现在,我们在负载平衡下部署服务,然后遇到了麻烦。场景是,主机服务1正在运行,同时服务1中正在运行后台作业,然后我们启动主机服务2(在此之前,例如通过维护,它被停止了),因为这两个服务1服务2和服务2使用相同的数据库,因此启动服务2时,它将从数据库中读取未完成的后台作业,然后运行它。但是这些作业已经由服务1处理,并且会导致某些意外结果。

对于我来说,我的问题是如何解决它以及最佳实践是什么?

1 个答案:

答案 0 :(得分:0)

您需要将后台作业编写为不与其他实例重叠。 使用IsItRunning

这样的布尔值标志
  1. 在工作开始时设置IsItRunning=true
  2. 如果IsItRunning == false
  3. 开始工作
  4. 在工作完成时设置IsItRunning=false

您的所有实例都会开始工作,但是您的实际代码只会运行一次。