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));
    }
}