iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >Abp集成HangFire开源.NET任务调度框架
  • 850
分享到

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

2024-04-02 19:04:59 850人浏览 八月长安
摘要

目录简要说明什么是Hangfire简要说明 后台作业在系统开发的过程当中,是比较常用的功能。因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 excel 文档导入、批量

简要说明

后台作业在系统开发的过程当中,是比较常用的功能。因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 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框架的资料请关注编程网其它相关文章!

--结束END--

本文标题: Abp集成HangFire开源.NET任务调度框架

本文链接: https://www.lsjlt.com/news/147710.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Abp集成HangFire开源.NET任务调度框架
    目录简要说明什么是Hangfire简要说明 后台作业在系统开发的过程当中,是比较常用的功能。因为总是有一些长耗时的任务,而这些任务我们不是立即响应的,例如 Excel 文档导入、批量...
    99+
    2024-04-02
  • .net任务调度框架Hangfire简介
    任务调度是我们项目中常见的功能,虽然任务调度的功能实现本身并不难,但一个好用的轮子还是可以给我们的开发的效率提升不少的。 在.net环境中,较为有名的任务调度框架是HangFire与...
    99+
    2024-04-02
  • .net任务调度框架Hangfire怎么使用
    这篇文章主要讲解了“.net任务调度框架Hangfire怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.net任务调度框架Hangfire怎么使用”吧!简单使用:这里就简单的演示.n...
    99+
    2023-07-02
  • .net任务调度框架FluentScheduler简介
    之前我在文章中介绍过.net中的任务调度框架Hangfire,HangFire虽然本身输入比较简单好用的,但是,如果我们的程序本身提供的服务不是任务调度,而任务调度只是里面并不重要的...
    99+
    2024-04-02
  • ASP Hangfire任务调度与其他任务调度框架对比:哪个更适合你?
    ASP Hangfire任务调度框架介绍 ASP Hangfire是一个基于.NET的轻量级任务调度框架,可以轻松地将长期运行的任务安排到以后执行。Hangfire支持多种不同的存储后端,包括SQL Server、PostgreSQL、M...
    99+
    2024-02-04
    任务调度 ASP Hangfire Quartz Celery Luigi Airflow
  • .net任务调度框架FluentScheduler怎么使用
    这篇文章主要介绍“.net任务调度框架FluentScheduler怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.net任务调度框架FluentScheduler怎么使用”文章能帮助大家解...
    99+
    2023-07-02
  • 为ABP框架添加基础集成服务
    目录定义一个特性标记全局统一消息格式Http 状态码常用的请求结果响应模型全局异常拦截器先说明一下ApiResponseModel 是抽象类跨域请求配置 API 服务统一 API 模...
    99+
    2024-04-02
  • Java 任务调度框架 Quartz实操
    目录1、Quartz 1.1 引入依赖 1.2 入门案例 任务类,需要实现 Job 接口 定时器类 1.3 Job 与 JobDetail 1.4 JobExecutionConte...
    99+
    2024-04-02
  • golang任务调度框架怎么使用
    在Go语言中,可以使用多种任务调度框架来进行任务的管理和调度,例如:1. Gin: Gin是一个高性能的Go语言Web框架,它支持路...
    99+
    2023-09-13
    golang
  • python任务调度框架怎么使用
    Python任务调度框架最常用的是APScheduler,下面是APScheduler的使用步骤:1. 安装APScheduler:...
    99+
    2023-09-21
    python
  • 任务调度框架Quartz怎么使用
    要使用Quartz任务调度框架,您可以按照下面的步骤进行操作:1. 引入Quartz依赖:您可以在项目的构建文件中引入Quartz的...
    99+
    2023-09-21
    Quartz
  • golang任务调度框架怎么实现
    要实现一个Golang任务调度框架,可以按照以下步骤进行: 定义任务结构体:首先,定义一个任务结构体,包含任务的属性,例如任务的I...
    99+
    2023-10-25
    golang
  • Python 强大的任务调度框架 Celery!
    什么是 celery这次我们来介绍一下 Python 的一个第三方模块 celery,那么 celery 是什么呢? celery 是一个灵活且可靠的,处理大量消息的分布式系统,可以在多个节点之间处理某个任务; celery 是一个专注于实...
    99+
    2023-05-14
    Python 框架 Celery
  • java任务调度框架怎么使用
    Java任务调度框架通常用于在指定的时间间隔或特定时间点执行任务。常见的Java任务调度框架有Quartz和Spring Task。...
    99+
    2023-09-13
    java
  • Java任务调度框架Quartz怎么使用
    本篇内容介绍了“Java任务调度框架Quartz怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! Quartz相较于Time...
    99+
    2023-06-22
  • Python强大的任务调度框架Celery怎么使用
    本篇内容介绍了“Python强大的任务调度框架Celery怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是 celery这次我们...
    99+
    2023-07-06
  • web分布式定时任务调度框架怎么使用
    这篇文章主要讲解了“web分布式定时任务调度框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web分布式定时任务调度框架怎么使用”吧!一、业务背景1.1 为什么需要使用定时任务调度...
    99+
    2023-06-04
  • Java的任务调度框架cron4j 2.2.5发布的示例分析
    Java的任务调度框架cron4j 2.2.5发布的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。cron4j 2.2.5 发布了,主要改进有:Predictor ...
    99+
    2023-06-17
  • Laravel 框架能否帮助您更快地完成开发任务?
    Laravel 是一款流行的 PHP 开发框架,它提供了一些强大的工具和功能,可以帮助开发人员更快地完成开发任务。在本文中,我们将探讨 Laravel 框架的一些特性,并且演示如何使用这些特性来加速开发过程。 一. Laravel 框架的...
    99+
    2023-10-27
    ide 数据类型 laravel
  • 用 Python 和 Javascript 实现分布式任务调度,有哪些值得推荐的框架?
    随着云计算和大数据的发展,分布式系统的重要性越来越受到关注。在分布式系统中,任务调度是一个非常关键的部分,而分布式任务调度可以更好地利用资源,提高系统的效率和可靠性。本文将介绍用 Python 和 Javascript 实现分布式任务调度的...
    99+
    2023-06-19
    leetcode javascript 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作