1

我们有多个 Web 服务器运行我们的站点,并带有负载平衡器,因此根据负载将用户定向到不同的服务器。每个服务器上的每个实例的代码都是相同的,并且我们有正在运行的重复作业。显然,我们不希望作业同时在两台服务器上运行。

当作业运行时,hangfire 是否实施锁定,因此它不会自动再次运行?

目前我们已经在每个运行的方法上都有这个 [Hangfire.DisableConcurrentExecution(60 * 60 * 5)] 会阻止两个服务器同时运行代码吗?

4

1 回答 1

0

看看互斥锁。它们将阻止同时执行需要访问一个资源的两个进程。

互斥锁可防止同时执行共享同一资源标识符的多个后台作业。与其他原语不同,它们是动态创建的,因此我们不需要先使用 IThrottlingManager 来创建它们。我们所需要的只是用 MutexAttribute 过滤器装饰我们的后台作业方法,并定义应该使用什么资源标识符。

[Mutex("my-resource")]
public void MyMethod()
{
    // ...
}

当我们基于这种方法创建多个后台作业时,它们将尽最大努力一个接一个地执行,限制如下所述。如果有一个当前正在执行的互斥锁保护的后台作业,其他执行将被限制(默认在一分钟后重新安排),允许工作人员无需等待即可处理其他作业。

来源:https ://docs.hangfire.io/en/latest/background-processing/throttling.html#

于 2021-09-17T14:27:29.860 回答