微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AspNet样板:Hangfire队列

如何解决AspNet样板:Hangfire队列

我正试图在我的AspNet Zero项目中使用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 指定队列名称,因为框架将使用依赖注入来解析 HangfireBackgroundJobManager 类型的 IBackgroundJob<TArgs>

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?