aspnetboilerplate - AspNet 样板:Hangfire 队列
问题描述
我正在尝试在我的 AspNet Zero 项目中使用Hangfire 队列。
我将后端配置为仅处理特定队列,如本例所示:
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>
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));
}
}
推荐阅读
- python - 保存Django模型时如何要求特定字段传递一个值
- css - div 的宽度错误(flex)
- oop - 在 Common Lisp 对象系统中分离初始化参数和类槽以创建对象
- android - Android Jetpack Compose 本地化问题
- flutter - 如何在小部件颤动中使用具有可见性的 FutureBuilder
- assembly - 使用 mips32 程序集的数组中的最大元素
- npm - 纱线的嵌套依赖项解析未显示在 yarn.lockfile 中
- scala - 使用 sbt 将 Scala 与 Hive 数据库连接起来,使用 IntelliJ 进行依赖
- python - 如何告诉 pandas_datareader 不要四舍五入?
- export - 从 Azure Sql 数据库副本中删除数据同步元数据