Abp集成HangFire开源.NET任务调度框架

目录
  • 简要说明
  • 什么是Hangfire

简要说明

后台作业在系统开发的过程当中,是比较常用的功能。因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 Excel 文档导入、批量发送短信通知等。

ABP vNext 提供了后台作业的支持,并且还提供了对 HangFire 和 RabbitMQ 的后台作业集成。开发人员在使用这些第三方库的时候,基本就是开箱即用,不需要做其他复杂的配置。

ABP vNext 的实现就是在 CLR 的 Timer 之上封装了一层,周期性地执行用户逻辑。
ABP vNext 默认提供的 后台任务管理器,就是在后台作业基础之上进行的封装。

涉及到后台任务的模块一共有 6 个,它们分别是:

  • Volo.Abp.Threading :提供了一些常用的线程组件,其中 AbpTimer 就是在里面实现的。
  • Volo.Abp.BackgroundWorkers :后台任务的定义和实现。
  • Volo.Abp.BackgroundJobs.Abstractions :后台任务的一些共有定义。
  • Volo.Abp.BackgroundJobs :默认的后台任务管理器实现。
  • Volo.Abp.BackgroundJobs.HangFire :基于 Hangfire 库实现的后台任务管理器。
  • Volo.Abp.BackgroundJobs.RabbitMQ :基于 RabbitMQ 实现的后台任务管理器。

什么是Hangfire

Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core。个人认为它最大特点在于内置提供集成化的控制台,方便后台查看及监控。

引用

<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="1.0.2" />
<PackageReference Include="Volo.Abp.Autofac" Version="1.0.2" />
<PackageReference Include="Hangfire" Version="1.7.7" />
<PackageReference Include="Hangfire.AspNetCore" Version="1.7.7" />
<PackageReference Include="Hangfire.Dashboard.BasicAuthorization" Version="1.0.2" />
<PackageReference Include="Hangfire.Redis.StackExchange.StrongName" Version="1.7.0" />

启动

public class Startup
   {
       public void ConfigureServices(IServiceCollection services)
       {
           services.AddApplication();
           var Configuration = services.GetConfiguration();
           GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(int.Parse(Configuration["Hangfire:JobExpirationTimeout"])));
           services.AddHostedService();
           services.AddHangfire(x =>
           {
               var connectionString = Configuration["Hangfire:Redis:ConnectionString"];
               x.UseRedisStorage(connectionString, new RedisStorageOptions()
               {
                   //活动服务器超时时间
                   InvisibilityTimeout = TimeSpan.FromMinutes(60),
                   Db = int.Parse(Configuration["Hangfire:Redis:Db"])
               });
               x.UseDashboardMetric(DashboardMetrics.ServerCount)
              .UseDashboardMetric(DashboardMetrics.RecurringJobCount)
              .UseDashboardMetric(DashboardMetrics.RetriesCount)
              .UseDashboardMetric(DashboardMetrics.AwaitingCount)
              .UseDashboardMetric(DashboardMetrics.EnqueuedAndQueueCount)
              .UseDashboardMetric(DashboardMetrics.ScheduledCount)
              .UseDashboardMetric(DashboardMetrics.ProcessingCount)
              .UseDashboardMetric(DashboardMetrics.SucceededCount)
              .UseDashboardMetric(DashboardMetrics.FailedCount)
              .UseDashboardMetric(DashboardMetrics.EnqueuedCountOrNull)
              .UseDashboardMetric(DashboardMetrics.FailedCountOrNull)
              .UseDashboardMetric(DashboardMetrics.DeletedCount);
           });
       }
       public void Configure(IApplicationBuilder app, IConfiguration Configuration)
       {
           app.InitializeApplication();
           app.UseAuthorization();
           var filter = new BasicAuthAuthorizationFilter(new BasicAuthAuthorizationFilterOptions
       {
           SslRedirect = false,
           RequireSsl = false,
           LoginCaseSensitive = false,
           Users = new[]
           {
                       new BasicAuthAuthorizationUser
                       {
                           Login = Configuration["Hangfire:Login"] ,
                           PasswordClear= Configuration["Hangfire:PasswordClear"]
                       }
           }
       });
           app.UseHangfireDashboard("", new DashboardOptions
           {
               Authorization = new[]
               {
                  filter
               },
           });
           var jobOptions = new BackgroundJobServerOptions
           {
               Queues = new[] { "critical", "test", "default" },
               WorkerCount = Environment.ProcessorCount * int.Parse(Configuration["Hangfire:ProcessorCount"]),
               ServerName = Configuration["Hangfire:ServerName"],
               SchedulePollingInterval = TimeSpan.FromSeconds(1), //计划轮询间隔  支持任务到秒
           };
           app.UseHangfireServer(jobOptions);
       }
   }

设置

///
   /// 已完成的job设置过期,防止数据无限增长
   ///
   public class SucceededStateExpireHandler : IStateHandler
   {
       public TimeSpan JobExpirationTimeout;
       public SucceededStateExpireHandler(int jobExpirationTimeout)
       {
           JobExpirationTimeout = TimeSpan.FromMinutes(jobExpirationTimeout);
       }
       public string StateName => SucceededState.StateName;
       public void Apply(ApplyStateContext context, IWriteOnlyTransaction transaction)
       {
           context.JobExpirationTimeout = JobExpirationTimeout;
       }
       public void Unapply(ApplyStateContext context, IWriteOnlyTransaction transaction)
       {
       }
   }

以上就是Abp集成HangFire开源.NET任务调度框架的详细内容,更多关于Abp集成HangFire框架的资料请关注我们其它相关文章!

(0)

相关推荐

  • ABP(现代ASP.NET样板开发框架)系列之二、ABP入门教程详解

    ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板. ABP的官方网站:http://www.aspnetboilerplate.com ABP在Github上的开源项目:https://github.com/aspnetboilerplate ABP 的由来 "DRY--避免重复

  • 如何在Asp.Net Core中集成ABP Dapper

    在实际的项目中,除了集成ABP框架的EntityFrameworkCore以外,在有些特定的场景下不可避免地会使用一些SQL查询语句,一方面是由于现在的EntityFrameworkCore2.X有些问题没有解决,另外一方面是基于性能方面的考虑,在了解本篇内容之前,首先还是来看看官方文档来给出的说明. 按照官方的介绍整体可以分为下面的步骤:1 安装依赖包.2 添加DependsOn属性标签.3 Entity to Table Mapping. 4 Usage 通过上面的4个步骤我们就能够正常在A

  • Hangfire在ASP.NET CORE中的简单实现方法

    hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNetCore hangfire的任务需要数据库持久化,我们在Startup类中修改ConfigureServices 然后在Configure方法中启用hangfire中间件 现在我们运行一下项目,可以看到,数据库里自动生成了很多表,这些表就是用来持久化任务的 我们打开如下地址,可以看到hangfir

  • .net core 基于Hangfire+Mysql持久化实现定时任务配置方法

    1.negut引入hangfire相关包 Hangfire.AspNetCore,Hangfire.Core,Hangfire.Dashboard.BasicAuthorization,Hangfire.MySqlStorage 2.Appsetting 配置hangfire资源 "HangFire": { "Connection": "Server=127.0.0.1;uid=root;pwd=wakamysql666;database=Hangfire

  • Abp集成HangFire开源.NET任务调度框架

    目录 简要说明 什么是Hangfire 简要说明 后台作业在系统开发的过程当中,是比较常用的功能.因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 Excel 文档导入.批量发送短信通知等. ABP vNext 提供了后台作业的支持,并且还提供了对 HangFire 和 RabbitMQ 的后台作业集成.开发人员在使用这些第三方库的时候,基本就是开箱即用,不需要做其他复杂的配置. ABP vNext 的实现就是在 CLR 的 Timer 之上封装了一层,周期性地执行用户逻辑.ABP

  • .net任务调度框架Hangfire简介

    任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的. 在.net环境中,较为有名的任务调度框架是HangFire与Quartz.NET,本文这里主要介绍Hangfire,相比Quartz.NET来说,它提供了更加友好的页面,使用起来更加方便.Hangfire的优点网上有不少文章介绍的,这里简单的列举一下: 支持各种常见的任务类型 持久化保存任务.队列.统计信息 重试机制 多语言支持 支持任务取消 支持按指定Job Queue处理

  • .net任务调度框架FluentScheduler简介

    之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的小功能的时候,用HangFire显得有点过重了,这里本文就介绍一个简单好用的任务调度框架FluentScheduler. 比起Hangfire来,FluentScheduler相对就简单得多,它只是提供了一个类库,提供任务调度的基本功能,没有像hangfire的数据库,web服务的依赖,功能变少,也更加简单了.非常适

  • Java 任务调度框架 Quartz实操

    目录 1.Quartz 1.1 引入依赖 1.2 入门案例 任务类,需要实现 Job 接口 定时器类 1.3 Job 与 JobDetail 1.4 JobExecutionContext 1.5 JobDataMap 手动获取 JDM 参数案例 2.Job 类实现 JDM 参数的 Setter 方法,实例化时自动绑定参数 1.6 Job 状态 有无状态 Job 区别案例 1.7 Trigger Trigger 获取参数案例 1.8 SimpleTripper  Quartz相较于Timer,

  • C#开源的AOP框架--KingAOP基础

    AOP面向切面编程(Aspect Oriented Programming),是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.Spring框架用的核心技术就是AOP,是函数式编程的一种衍生范型.利用AOP的好处就是可以对业务逻辑进行隔离,降低耦合度,提高程序的可重用性,同时提高了开发的效率.开源的AOP也有不少,我这里用的KingAOP. 1 项目结构 2 定义一个日志记录的实体类User和LoggingAspect切面日志类 namespace AOPDemo.Logging

  • 开源Web应用框架Django图文教程

    本文面向:有python基础,刚接触web框架的初学者. 环境:windows7 python3.5.1 pycharm专业版 Django 1.10版 pip3 一.Django简介 百度百科:开放源代码的Web应用框架,由Python语言编写...... 重点:一个大而全的框架,啥都替你考虑好了. 1. web框架介绍 具体介绍Django之前,必须先介绍WEB框架等概念. web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后"填空"或"修改"

  • springboot整合quartz实例demo

    目录 一.quartz简介 二.demo结构 三.代码详解 四.代码效果 一.quartz简介 1.Quartz是一个开源的任务调度框架.基于定时.定期的策略来执行任务是它的核心功能,比如x年x月的每个星期五上午8点到9点,每隔10分钟执行1次. 2.Quartz有3个核心要素:调度器(Scheduler).任务(Job).触发器(Trigger). 2.1.Job(任务):是一个接口,有一个方法void execute(),可以通过实现该接口来定义需要执行的任务(具体的逻辑代码).2.2.Jo

  • 基于.NET平台常用的框架和开源程序整理

    自从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继续补充这篇日志,日积月累,就能形成一个自己的组件经验库. 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的KV数据库. 它的出现很大程度补偿了Mem

  • 六款值得推荐的android(安卓)开源框架简介

    1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-asyn

  • 浅谈Zookeeper开源客户端框架Curator

    zookeepercurator Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKeeper的过程中遇到的问题, 我们也遇到了, 所以开始研究一下, 首先从他在github上的源码, wiki文档以及Netflix的技术blog入手. 看完官方的文档之后,

随机推荐