运行项目,输入路径<your-site>/hangfire然后就可以看到界面了。
#78a5ba1a7de2f58f96535972fb2db04c#
我们分别点击上面界面中的“加入队列”“立即执行按钮”,就得到下面这幅图片。
点击进去,可以看到如下图。
界面看起来很清爽,而且一目了然。这就是可视化界面的好处。
Abp.HangfireASP.NET Boilerplate提供后台作业和后台工作者,用于在应用程序的后台线程中执行某些任务。
后台作业用于排队某些任务,以队列和持续的方式在后台执行。
我们可以通过从BackgroundJob <TArgs>类继承或直接实现IBackgroundJob <TArgs>接口来创建后台作业类。
这是最简单的后台工作:
后台作业定义了一个Execute方法获取输入参数。参数类型被定义为泛型 类参数,如示例中所示。后台工作必须注册到依赖注入系统中,实现ITransientDependency是最简单的方式。下面定义一个更实际的工作,在后台队列中发送电子邮件:
public class SimpleSendEmailJob : BackgroundJob<SimpleSendEmailJobArgs>, ITransientDependency { private readonly IRepository<User, long> _userRepository; private readonly IEmailSender _emailSender; public SimpleSendEmailJob(IRepository<User, long> userRepository, IEmailSender emailSender) { _userRepository = userRepository; _emailSender = emailSender; } public override void Execute(SimpleSendEmailJobArgs args) { var senderUser = _userRepository.Get(args.SenderUserId); var targetUser = _userRepository.Get(args.TargetUserId); _emailSender.Send(senderUser.EmailAddress, targetUser.EmailAddress, args.Subject, args.Body); } }我们注入了用户仓储(为了获得用户信息)和email发送者(发送邮件的服务),然后简单地发送了该邮件。SimpleSendEmailJobArgs是该工作的参数,它定义如下:
[Serializable] public class SimpleSendEmailJobArgs { public long SenderUserId { get; set; } public long TargetUserId { get; set; } public string Subject { get; set; } public string Body { get; set; } }作业参数应该是可序列化的,因为它 被序列化并存储在数据库中。虽然ASP.NET Boilerplate默认后台作业管理器使用JSON 序列化(不需要[Serializable]属性),但最好定义[Serializable]属性,因为将来可能会切换到另一个作业管理器,在二进制序列化。保持你的参数简单(如 DTO),不要包含 实体或其他不可序列化的对象。如SimpleSendEmailJob示例所示,我们只能存储 一个实体的Id,并从作业中的存储库获取该实体。将新作业添加到队列中定义后台作业后,我们可以注入并使用IBackgroundJobManager 将作业添加到队列中。查看上面定义的TestJob示例:
public class MyService { private readonly IBackgroundJobManager _backgroundJobManager; public MyService(IBackgroundJobManager backgroundJobManager) { _backgroundJobManager = backgroundJobManager; } public void Test() { _backgroundJobManager.Enqueue<TestJob, int>(42); } }当入队(Enqueue)时,我们将42作为参数传递。IBackgroundJobManager将会实例化并使用42作为参数执行TestJob。
让我们看一下如何为上面定义的SimpleSendEmailJob添加一个新的工作:
Enqueu(或EnqueueAsync)方法具有其他参数,如优先级 和延迟。
默认后台作业管理器