这documentation说,你可以通过使用该方法Queue
属性被调用指定的队列。这是假设你总是希望在同一个队列执行的方法。是否有一个调用Enqueue
指定队列的名称把工作分成了(有效地把决策在作业生成,而不是作业的定义的手)过程的方法。
随着IBackgroundJobClient的情况下,你可以指定一个队列。
IBackgroundJobClient hangFireClient = new BackgroundJobClient();
EnqueuedState myQueueState = new Hangfire.States.EnqueuedState("myQueue");
hangFireClient.Create<SomeClass>(c => c.SomeMethod(), myQueueState);
请注意,以这种方式,重试就会把工作恢复到默认队列。你将需要额外的代码在同一个队列重试,使用JobFilter
http://discuss.hangfire.io/t/one-queue-for-the-whole-farm-and-one-queue-by-server/490/3
由于添加一个额外的参数似乎是这么难的迟发型团队; - )....
......我已经找到了最方便的方法就是让两个方法,只需调用实际执行,并把每个不同[Queue]
属性。
通常,如果我需要切换队列它的开发/生产之间,我想只需要调用的东西像RunOrder(...)
isTestOrder=boolean
,而不是关心在这一水平的队列。
public void RunOrder(int orderId, bool isTestOrder)
{
if (isTestOrder)
{
BackgroundJob.Enqueue(() => _RunTestOrder(orderId));
}
else
{
BackgroundJob.Enqueue(() => _RunOrder(orderId));
}
}
[Queue("dev")]
public void _RunTestOrder(int orderId) {
OrderProcessor.RunOrder(orderId); // actual code to call processor
}
[Queue("production")]`
public void _RunProductionOrder(int orderId) {
OrderProcessor.RunOrder(orderId); // is the same in both 'hangfire proxies'
}
注意_
的使用,以表明这些都注定不会被直接调用。我不记得了手,如果迟发型方法需要公开或不 - 但如果他们确实需要那么_
更重要。