此文档说明您可以通过使用Queue要调用的方法的属性来指定队列.这假设您始终希望在同一队列上执行方法.是否有一种方法可以调用进程Enqueue来指定要将作业放入队列的名称(有效地将决策权交给作业生成器,而不是作业的定义).
Xav*_*ero 12
使用IBackgroundJobClient的实例,您可以指定队列.
IBackgroundJobClient hangFireClient = new BackgroundJobClient();
EnqueuedState myQueueState = new Hangfire.States.EnqueuedState("myQueue");
hangFireClient.Create<SomeClass>(c => c.SomeMethod(), myQueueState);
Run Code Online (Sandbox Code Playgroud)
请注意,通过这种方式,重试会将作业恢复到默认队列.您需要使用JobFilter在同一队列中重试其他代码
http://discuss.hangfire.io/t/one-queue-for-the-whole-farm-and-one-queue-by-server/490/3
如果您想动态更改队列,可以按照这种方式。
此实施适用于所有人Enqueue,Schedule并且ContinueJobWith
诡计发生在[Queue("{0}")]. Hangfire 将作业参数传递给给定的pattern( "{0}"),用于获取每次状态更改String.Format("{0}", job.Args)时的实际队列,因此即使重试也会应用目标队列。
突出显示的代码语法:
// Enqueue "MyBackgroundJob1" under "critical" queue
var job2 = BackgroundJob.Enqueue(() => MyBackgroundJob1("critical", 523));
// Use one of following Attributes depending on your hangfire version
//[AdvancedQueue("{0}")] // 1.6.X
[Queue("{0}")] // In 1.7.X
public void MyBackgroundJob1(string queueName, int arg)
{
// Job implementation
}
Run Code Online (Sandbox Code Playgroud)
全面实施:
public class HangfireDynamicQueue
{
public void EnqueJobs()
{
// Enqueue "MyBackgroundJob1" under "default" queue
var job1 = BackgroundJob.Enqueue(() => MyBackgroundJob1("default", 123));
// Enqueue "MyBackgroundJob1" under "critical" queue
var job2 = BackgroundJob.Enqueue(() => MyBackgroundJob1("critical", 523));
// Execute "MyBackgroundJob1" after 10 seconds under "delayed" queue
var job3 = BackgroundJob.Schedule(() => MyBackgroundJob1("delayed", 678), TimeSpan.FromSeconds(10));
// Run "MyBackgroundJob2" after job3 under "delayed" queue
var job4 = BackgroundJob.ContinueJobWith(job3, () => MyBackgroundJob2("delayed", 435));
}
// Use one of following Attributes depending on your hangfire version
//[AdvancedQueue("{0}")] // 1.6.X
[Queue("{0}")] // In 1.7.X
public void MyBackgroundJob1(string queueName, int arg)
{
// Job implementation
}
// Use one of following Attributes depending on your hangfire version
//[AdvancedQueue("{0}")] // 1.6.X
[Queue("{0}")] // In 1.7.X
public void MyBackgroundJob2(string queueName, int arg)
{
// Job implementation
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6407 次 |
| 最近记录: |