ASP.NET Core开发-后台任务利器Hangfire使用

ASP.NET Core开发系列之后台任务利器Hangfire 使用。

Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序。

可以使用于ASP.NET 应用也可以使用于控制台。Hangfire 只需简单几句代码即可创建新的不同种类的任务。

目前 Hangfire 已经支持.NET Core ,现在就给大家讲解下在ASP.NET Core 里的使用。

Hangfire GitHub:https://github.com/HangfireIO/Hangfire

官网:http://hangfire.io/

相关文档介绍:http://docs.hangfire.io/en/latest/

首先我们新建一个ASP.NET Core Web Application

选择模板-》空的模板

然后添加引用:

NuGet 命令行执行

Install-Package Hangfire

添加好引用以后我们就可以来使用。

打开Startup.cs

首先在ConfigureServices 方法中注册服务:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHangfire(r=>r.UseSqlServerStorage("Data Source=.;Initial Catalog=HangfireDemo;User ID=sa;Password=123456"));
        }

这里是配置数据库,数据库需要确保存在,这里配置的是SQL Server数据库,目前官方支持SQL Server。

然后在Configure 方法中加入HangfireServer及HangfireDashboard:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHangfireServer();
            app.UseHangfireDashboard();

            app.Run(context =>
            {
                return context.Response.WriteAsync("Hello from ASP.NET Core!");
            });
        }

然后选择Kestrel执行,访问地址:http://localhost:5000/hangfire

成功运行,下面我们就可以来添加任务了。

            app.Map("/index", r =>
            {
                r.Run(context =>
                {
                    //任务每分钟执行一次
                    RecurringJob.AddOrUpdate(() => Console.WriteLine($"ASP.NET Core LineZero"), Cron.Minutely());
                    return context.Response.WriteAsync("ok");
                });
            });

            app.Map("/one", r =>
            {
                r.Run(context =>
                {
                    //任务执行一次
                    BackgroundJob.Enqueue(() => Console.WriteLine($"ASP.NET Core One Start LineZero{DateTime.Now}"));
                    return context.Response.WriteAsync("ok");
                });
            });

            app.Map("/await", r =>
            {
                r.Run(context =>
                {
                    //任务延时两分钟执行
                    BackgroundJob.Schedule(() => Console.WriteLine($"ASP.NET Core await LineZero{DateTime.Now}"), TimeSpan.FromMinutes(2));
                    return context.Response.WriteAsync("ok");
                });
            });

这里创建任务只是为了方便,我们也可以在初始化的时候创建,也可以在controller 中创建。

下面我们来执行。

首先访问 http://localhost:5000/index

然后访问 http://localhost:5000/await

最后访问 http://localhost:5000/one

这样任务也就都执行起来了。

Jobs 也就是查看所有的任务,我们可以在节目界面操作运行及删除,很方便。

我们还可以点击任务,查看任务详情。以及任务执行结果。

最终运行一段时间,还有图表展示

Startup.cs 完整代码:

 1     public class Startup
 2     {
 3         // This method gets called by the runtime. Use this method to add services to the container.
 4         // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
 5         public void ConfigureServices(IServiceCollection services)
 6         {
 7             services.AddHangfire(r=>r.UseSqlServerStorage("Data Source=.;Initial Catalog=HangfireDemo;User ID=sa;Password=123456"));
 8         }
 9
10         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
11         public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
12         {
13             loggerFactory.AddConsole();
14
15             if (env.IsDevelopment())
16             {
17                 app.UseDeveloperExceptionPage();
18             }
19             //GlobalConfiguration.Configuration.UseSqlServerStorage("Data Source=.;Initial Catalog=OrchardCMS;User ID=sa;Password=sa123456");
20
21             app.UseHangfireServer();
22             app.UseHangfireDashboard();
23
24             app.Map("/index", r =>
25             {
26                 r.Run(context =>
27                 {
28                     //任务每分钟执行一次
29                     RecurringJob.AddOrUpdate(() => Console.WriteLine($"ASP.NET Core LineZero"), Cron.Minutely());
30                     return context.Response.WriteAsync("ok");
31                 });
32             });
33
34             app.Map("/one", r =>
35             {
36                 r.Run(context =>
37                 {
38                     //任务执行一次
39                     BackgroundJob.Enqueue(() => Console.WriteLine($"ASP.NET Core One Start LineZero{DateTime.Now}"));
40                     return context.Response.WriteAsync("ok");
41                 });
42             });
43
44             app.Map("/await", r =>
45             {
46                 r.Run(context =>
47                 {
48                     //任务延时两分钟执行
49                     BackgroundJob.Schedule(() => Console.WriteLine($"ASP.NET Core await LineZero{DateTime.Now}"), TimeSpan.FromMinutes(2));
50                     return context.Response.WriteAsync("ok");
51                 });
52             });
53
54
55             app.Run(context =>
56             {
57                 return context.Response.WriteAsync("Hello from ASP.NET Core!");
58             });
59         }
60     }

通过Hangfire, 这样我们就可以很方便的在ASP.NET Core 里创建后台任务。而且提供管理界面供我们操作。

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

时间: 2024-08-05 07:06:20

ASP.NET Core开发-后台任务利器Hangfire使用的相关文章

ASP.NET Core开发-读取配置文件Configuration

ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML配置文件web.config. 新的配置系统支持多种格式的配置文件. 下面我们来以json 格式的配置文件正式开始学习. 我们新建一个ASP.NET Core Web 应用程序,选择无身份验证. 读取配置文件 在项目目录下有个 appsettings.json ,我们先来操作这个文件. 在appse

ASP.NET Core 开发-中间件(Middleware)

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/core-razor-layout.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-view-start.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-import-view.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-razor-tag

ASP.NET Core 开发-Logging 使用NLog 写日志文件

ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 .NET Core 和 ASP.NET Core . ASP.NET Core已经内置了日志支持,可以轻松输出到控制台. 学习Logging 组件的相关使用,使用NLog 将日志写入到文件记录. Logging 使用 新建一个 ASP.NET Core 项目,为了方便,我选择Web 应用程序,改身份验证 改为 不进行身份验证. 新建好以后,会自动引用好对应的 类库.这样我们就可以直接使用 Logge

Visual Studio 2017 ASP.NET Core开发

Visual Studio 2017 ASP.NET Core开发,Visual Studio 2017 已经内置ASP.NET Core 开发工具. 在选择.NET Core 功能安装以后就可以进行ASP.NET Core开发. 新的ASP.NET Core项目为csproj ,打开之前的xproj项目,会提示单向升级,确认以后,会自动帮你升级至csproj. 新建项目 VS 2017新建ASP.NET Core 项目: 确定以后 可选择ASP.NET Core 1.0 和ASP.NET Co

ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First

ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Framework Core 1.0 也已经发布了,可以适用于 .NET Core 1.0 及ASP.NET Core 1.0 . EF Core RC2 时,使用的Code First: http://www.cnblogs.com/linezero/p/EntityFrameworkCore.html E

ASP.NET Core开发Docker部署

ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细了解一下Docker的用途,以及真实的应用场景. Docker源于PaaS,PaaS的应用场景即是Docker的应用场景. Platform as a Service: 平台即服务, 是面向软件开发者的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软

ASP.NET Core开发-Docker部署运行

ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细了解一下Docker的用途,以及真实的应用场景. Docker源于PaaS,PaaS的应用场景即是Docker的应用场景. Platform as a Service: 平台即服务, 是面向软件开发者的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软

【视频】使用ASP.NET Core开发GraphQL服务

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时. GraphQL来自Facebook,它于2012年开始开发,2015年开源. GraphQL与编程语言无关,可以使用很多种语言/框架来构建Graph 服务器,包括.NET Core. 像Github,Pinterest,Coursera等公司都在使用GraphQL.Github的API到目前有4个版本,第三个版本用的是REST,而第四个版本使用的是GraphQL. 下面是GraphQL的典型应用场景: 视频教程:使

ASP.NET Core 开发人员异常页面

原文:ASP.NET Core 开发人员异常页面 UseDeveloperExceptionPage 中间件 我们谈谈在 Startup 类的 Configure()方法中以下代码: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseFileServer(); a