【问题标题】:Hangfire running recurring jobs on different web serversHangfire 在不同的 Web 服务器上运行重复作业
【发布时间】:2021-09-17 09:38:37
【问题描述】:

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

hangfire 是否在作业运行时实施锁定,使其不再自动运行?

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

【问题讨论】:

    标签: c# .net hangfire hangfire-sql


    【解决方案1】:

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

    Mutex 防止多个后台并发执行 共享相同资源标识符的作业。与其他原语不同, 它们是动态创建的,所以我们不需要使用 IThrottlingManager 首先创建它们。我们需要的只是装饰 我们使用 MutexAttribute 过滤器和定义的后台作业方法 应该使用什么资源标识符。

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

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

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

    【讨论】:

    • 谢谢你,我会调查的。我还被告知,通过添加属性 [DisableConcurrentExecution] 这也将解决问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2011-09-03
    • 1970-01-01
    • 2016-11-11
    • 2022-06-15
    • 2018-06-15
    • 2022-01-11
    相关资源
    最近更新 更多