如何解决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 举报,一经查实,本站将立刻删除。