【问题标题】:How to schedule a Hangfire background job on a specific time AND in a specific queue?如何在特定时间和特定队列中安排 Hangfire 后台作业?
【发布时间】:2021-06-08 16:14:23
【问题描述】:

我使用Hangfire 来安排作业。在我的设置中,我定义了两个不同的队列。一个用于处理周期性工作和具有“低”优先级的工作。另一个队列用于具有“高”优先级的作业,这些作业是根据用户输入临时创建的。非周期性作业是这样安排的,以确保它们最终进入正确的队列:

var client = new BackgroundJobClient();
var state = new EnqueuedState(queueName);
client.Create(methodCall, state);

一切正常,但现在我有一个新要求,我需要在某些条件下延迟执行“高优先级”作业。

我在 Stack Overflow 上发现 this 问题,其中提到 BackgroundJobClient.Schedule 操作接受 enqueueAt 参数:

var client = new BackgroundJobClient();
client.Schedule(methodCall, enqueueAt);

很遗憾,此调度操作没有为我提供定义队列的选项。使用这种方法安排的作业最终会出现在 Hangfire 的“默认”队列中。知道如何实现作业调度延迟以及能够在运行时确定队列吗?

【问题讨论】:

    标签: c# hangfire


    【解决方案1】:

    您可以使用为methodCall 定义队列名称的参数。基于discussion here,您可以有选择地在您选择的队列上运行该方法。 UseQueueFromParameter 应该可以解决您面临的问题

    【讨论】:

    • 这是一个有趣的方法。我会接受这个作为答案,尽管我不是 100% 确定我会以这种方式实现它。我正在考虑一种方法,我引入一个新组件,负责检测是否需要延迟,如果需要,它将在延迟期结束时重新安排自己。下一次执行将在延迟期结束时进行,然后组件会将原始请求调度到预期队列中。
    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2023-03-20
    • 2013-09-08
    • 2019-10-01
    相关资源
    最近更新 更多