AspNet 样板:Hangfire 队列
AspNet Boilerplate: Hangfire Queues
我正尝试在我的 AspNet 零项目中使用 Hangfire Queues。
我将后端配置为仅处理特定队列,如本例所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfireServer(options =>
{
options.Queues = new[] { "alpha", "beta", "default" };
});
}
但是,将 QueueAttribute
应用于 Execute()
方法,似乎没有指定应在哪个队列上处理作业。 Hangfire 数据库中的条目总是 default
.
public class TestJob : BackgroundJob<int>, ITransientDependency
{
[Queue("alpha")]
public override void Execute(int number)
{
// Do something
}
}
作业已根据 ABP 文档入队:
public class MyService
{
private readonly IBackgroundJobManager _backgroundJobManager;
public MyService(IBackgroundJobManager backgroundJobManager)
{
_backgroundJobManager = backgroundJobManager;
}
public void Test()
{
_backgroundJobManager.Enqueue<TestJob, int>(42);
}
}
入队时如何指定作业队列?
无法使用 ABP 指定队列名称,因为框架将使用依赖注入来解析类型 IBackgroundJob<TArgs>
int HangfireBackgroundJobManager。
当使用 DI 时,interface
必须用 [Queue("your_queue"]
属性修饰,并且由于显而易见的原因,我们无法访问此级别的 IBackgroundJob
接口。
我直接用Hangfire解决了这个问题。代码:
public interface ITestJob : ITransientDependency
{
[Queue("alpha")]
public void Execute(int number);
}
public class TestJob : ITestJob, ITransientDependency
{
public void Execute(int number)
{
// Do something
}
}
using Hangfire;
public class MyService
{
public MyService()
{
}
public void Test()
{
BackgroundJob.Enqueue<ITestJob>(x => x.Execute(42));
}
}
我正尝试在我的 AspNet 零项目中使用 Hangfire Queues。
我将后端配置为仅处理特定队列,如本例所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddHangfireServer(options =>
{
options.Queues = new[] { "alpha", "beta", "default" };
});
}
但是,将 QueueAttribute
应用于 Execute()
方法,似乎没有指定应在哪个队列上处理作业。 Hangfire 数据库中的条目总是 default
.
public class TestJob : BackgroundJob<int>, ITransientDependency
{
[Queue("alpha")]
public override void Execute(int number)
{
// Do something
}
}
作业已根据 ABP 文档入队:
public class MyService
{
private readonly IBackgroundJobManager _backgroundJobManager;
public MyService(IBackgroundJobManager backgroundJobManager)
{
_backgroundJobManager = backgroundJobManager;
}
public void Test()
{
_backgroundJobManager.Enqueue<TestJob, int>(42);
}
}
入队时如何指定作业队列?
无法使用 ABP 指定队列名称,因为框架将使用依赖注入来解析类型 IBackgroundJob<TArgs>
int HangfireBackgroundJobManager。
当使用 DI 时,interface
必须用 [Queue("your_queue"]
属性修饰,并且由于显而易见的原因,我们无法访问此级别的 IBackgroundJob
接口。
我直接用Hangfire解决了这个问题。代码:
public interface ITestJob : ITransientDependency
{
[Queue("alpha")]
public void Execute(int number);
}
public class TestJob : ITestJob, ITransientDependency
{
public void Execute(int number)
{
// Do something
}
}
using Hangfire;
public class MyService
{
public MyService()
{
}
public void Test()
{
BackgroundJob.Enqueue<ITestJob>(x => x.Execute(42));
}
}