如何在特定时间和特定队列中安排 Hangfire 后台作业?
How to schedule a Hangfire background job on a specific time AND in a specific queue?
我使用 Hangfire 来安排作业。在我的设置中,我定义了两个不同的队列。一个用于处理周期性作业和具有 'low' 优先级的作业。另一个队列用于具有 'high' 优先级的作业,这些作业是根据用户输入临时创建的。非经常性作业安排如下,以确保它们最终进入正确的队列:
var client = new BackgroundJobClient();
var state = new EnqueuedState(queueName);
client.Create(methodCall, state);
一切正常,但现在我有一个新要求,我需要在某些条件下延迟执行 'high priority' 个作业。
我在 Stack Overflow 上发现 this 问题,其中提到 BackgroundJobClient.Schedule 操作接受一个 enqueueAt 参数:
var client = new BackgroundJobClient();
client.Schedule(methodCall, enqueueAt);
不幸的是,这个调度操作没有为我提供定义队列的选项。使用这种方法安排的作业最终进入 Hangfire 的 'default' 队列。知道如何实现作业调度延迟以及在运行时确定队列的能力吗?
您可以使用为 methodCall
定义队列名称的参数。基于discussion here,您可以选择性地运行您选择的队列上的方法。 UseQueueFromParameter
应该可以解决您面临的问题
我使用 Hangfire 来安排作业。在我的设置中,我定义了两个不同的队列。一个用于处理周期性作业和具有 'low' 优先级的作业。另一个队列用于具有 'high' 优先级的作业,这些作业是根据用户输入临时创建的。非经常性作业安排如下,以确保它们最终进入正确的队列:
var client = new BackgroundJobClient();
var state = new EnqueuedState(queueName);
client.Create(methodCall, state);
一切正常,但现在我有一个新要求,我需要在某些条件下延迟执行 'high priority' 个作业。
我在 Stack Overflow 上发现 this 问题,其中提到 BackgroundJobClient.Schedule 操作接受一个 enqueueAt 参数:
var client = new BackgroundJobClient();
client.Schedule(methodCall, enqueueAt);
不幸的是,这个调度操作没有为我提供定义队列的选项。使用这种方法安排的作业最终进入 Hangfire 的 'default' 队列。知道如何实现作业调度延迟以及在运行时确定队列的能力吗?
您可以使用为 methodCall
定义队列名称的参数。基于discussion here,您可以选择性地运行您选择的队列上的方法。 UseQueueFromParameter
应该可以解决您面临的问题