【问题标题】:Stop Hangfire job from enqueuing if already enqueued如果已经入队,则停止 Hangfire 作业入队
【发布时间】:2018-03-20 23:26:51
【问题描述】:

如果一个hangfire.io 作业已经入队,有没有一种简单的方法可以阻止hangfire.io 作业入队?

查看 jobfilter 属性,没有什么特别突出的是如何获取服务器上任何内容的状态。我可以使用连接对象并查询商店吗?

谢谢

【问题讨论】:

  • 另一个选项是DisableConcurrentExecution 属性。它有一个必需的 timeoutInSeconds 参数。
  • 这只会让他们一次处理一个,而不是我真正想要实现的目标。

标签: c# hangfire


【解决方案1】:

请看以下库所有者https://gist.github.com/odinserj/a8332a3f486773baa009的要点

这应该可以防止同一个作业通过查询指纹多次排队。

您可以通过使用属性[DisableMultipleQueuedItemsFilter] 装饰方法来为每个后台作业激活它。

或者你可以全局启用GlobalJobFilters.Filters.Add(new DisableMultipleQueuedItemsFilter());

【讨论】:

  • 这个解决方案在最新的 Hangire 1.7.8 中仍然有效吗?这个解决方案是防弹的吗?它会以某种方式影响性能吗?我们通过 Hangfire 做了很多工作。
【解决方案2】:

我正在使用以下代码块来检查是否添加新作业,具体取决于其当前状态:(我知道我目前只查看前 1000 个作业。您可以实现您的逻辑类型))

private static bool IsOKToAddJob(string JobName, string QueueName, out string NotOKKey)
    {
        try
        {
            var monapi = JobStorage.Current.GetMonitoringApi();
            var processingJobs = monapi.ProcessingJobs(0, 1000);
            NotOKKey = processingJobs.Where(j => j.Value.Job.ToString() == JobName).FirstOrDefault().Key;

            if (!string.IsNullOrEmpty(NotOKKey)) return false;

            var scheduledJobs = monapi.ScheduledJobs(0, 1000);
            NotOKKey = scheduledJobs.Where(j => j.Value.Job.ToString() == JobName).FirstOrDefault().Key;

            if (!string.IsNullOrEmpty(NotOKKey)) return false;

            var enqueuedJobs = monapi.EnqueuedJobs(QueueName, 0, 1000);
            NotOKKey = enqueuedJobs.Where(j => j.Value.Job.ToString() == JobName).FirstOrDefault().Key;

            if (!string.IsNullOrEmpty(NotOKKey)) return false;

            NotOKKey = null;
            return true;
        }
        catch (Exception ex)
        {
            //LOG your Exception;
        }
    }

而且用法很简单:

if (IsOKToAddJob(YOURJOBNAME, QueueName, out NOTOKKey))
    var id = BackgroundJob.Enqueue(() =>YOURMETHOD()); 

//rest

【讨论】:

  • 有趣的解决方案,但由于我必须在紧张的事务中排队,我不想在客户端中查询。也许我可以在属性中做到这一点。谢谢!
  • 当我打电话给IsOKToAddJob 时如何获得YOURJOBNAME
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多