概述

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

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

后台工作者 的话,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<AppModule>();var Configuration = services.GetConfiguration();GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(int.Parse(Configuration["Hangfire:JobExpirationTimeout"])));services.AddHostedService<RecurringJobsService>();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);}}

设置

  /// <summary>/// 已完成的job设置过期,防止数据无限增长/// </summary>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){}}

源码下载

https://github.com/conanl5566/dotnet-core-Example/tree/master/WebApplication15%20-%20%E5%89%AF%E6%9C%AC

Abp vNext 后台作业hangfire相关推荐

  1. 基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理

    基于 abp vNext 和 .NET Core 开发博客项目 - 集成Hangfire实现定时任务处理 转载于:https://github.com/Meowv/Blog 接下来,将完成一个任务调度 ...

  2. Abp Vnext Pro 的 Vue 实现版本

    Abp Vnext Pro 的 Vue 实现版本 开箱即用的中后台前端/设计解决方案 知识点 .Net Core5.0 Abp Vnext 4.x , Ant Design, Vue2.x Mysql ...

  3. ABP VNext学习日记15

    1.Polly服务容错模式 解析: [1]错误处理fault handling:重试.熔断.回退 [2]弹性应变resilience:超时.舱壁.缓存 2.Polly错误处理步骤 解析: [1]定义条 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场

    基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场 转载于:https://github.com/Meowv/Blog.git 在程序员界,总有一批强迫 ...

  5. Abp Vnext Vue3 的版本实现

    Abp Vnext Pro 的 Vue3 实现版本 开箱即用的中后台前端/设计解决方案 开始 Github地址 文档地址 演示地址 系统功能 [x] 用户管理 [x] 角色管理 [x] 审计日志 [x ...

  6. 阿星Plus:基于abp vNext开源一个博客网站

    作为微软最早迈向开源的重要软件之一,.NET 5的发布具有重要意义! 微软希望 .NET Framework 开发者能够迁移他们的代码和应用到 .NET 5.0 上,为明年发布的 .NET 6.0 将 ...

  7. [译]ABP vNext介绍

    译者注 ASP.NET Boilerplate是.Net平台非常优秀的一个开源Web应用程序框架,在国内也有大量的粉丝. 近日, 本人在github上闲逛, 发现ASP.NET Boilerplate ...

  8. abp mysql .net core_基于abp vNext和.NET Core 开发博客

    基于 abp vNext 和 .NET Core 开发博客项目>是由智客[阿星Plus](微信公众号:阿星Plus)提供,阅读原文),楠木大叔整理. 此个人博客项目底层基于 ABP Framew ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

最新文章

  1. 网络知识 | 《图解HTTP》读书笔记(上)
  2. 前端学习(2583):生态圈练习解答下
  3. 运用PARALLEL方式成倍提升Oracle数据分析效率
  4. 7-11 名人堂与代金券 (25 分)
  5. paper 134:结构张量structure tensor(二)
  6. C# via CLR之IL中间语言初步探索
  7. word页面顺序倒过来_Word里的表格,行之间的顺序如何颠倒过来?
  8. tensorflow自定义op_TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
  9. php安装libpng,安装php:configure: error: libpng.(a|so) not found解决办法
  10. 2018全球最值得关注的60家半导体公司,7家中国公司新上榜 | 年度榜单
  11. 在 LaTeX 中插入图片
  12. PHP在线客服系统IM即时通讯聊天源码
  13. springboot+教学工作量管理系统 毕业设计-附源码221541
  14. 【计算机科学】【2020.05】基于深度学习的计算蛋白质结构预测
  15. 影响个人征信的不良习惯有哪些?
  16. 【Go语言实战】(4) 简简单单的几十行代码实现 TCP 通信
  17. 【组成原理-处理器】微程序控制器
  18. 中国移动5G专网运营体系:一支队伍、一个平台、一把钥匙
  19. Mac--键盘输入的技巧
  20. 51nod3054 听指挥打胜仗

热门文章

  1. 最全的正则表达式大全
  2. DOM节点创建(jQuery)
  3. webform数据导出
  4. php 设计模式 - 单例
  5. C# 对Datatable排序
  6. 告别 ROR windows 部署的噩梦-在 windows 上面 使用 Apache 部署 Ruby On Rails
  7. java 图片缓存工具,java缓存读取图片解决方案
  8. springboot ElasticSearch 简单的全文检索高亮
  9. 阿里云三维可视化使用初体验
  10. nginx作为tcp代理 虚拟主机配置 模板