闲暇无事,写个帖子记录生活;

关于第一次使用hangfire使用的demo,该文章比较简单,因为我现在比较冷;

首先

Q:为什么使用Hangfire?

A:鄙人愚见,使用Hangfire在于三点,1.任务持久化,2.拥有可视化控制台界面,3.可重试

本文主要讲述以下两个方面:

一、添加及执行定时任务(周期任务)

使用场景:心跳检查,定时更新,或者数据同步等需要循环执行的周期性任务

二、客户端调用添加队列任务(只执行一次)

使用场景:信息推送(邮件,短信,微信公众号,钉钉等等),订单超时(超过限定时间未付款则取消订单)等只执行一次的任务,是否延时执行看需求;

废话说完,回归主题

一、添加引用NuGet包

Hangfire.AspNetCore    为基础包,必需

下面三个为数据持久化时持久地址,你用什么就挑那个引用就好了,tips:Hangfire默认的是MSSQL

Hangfire.MemoryStorage    微软提供的缓存,你程序挂了,这玩意儿也就没了

Hangfire.MySql.Core    持久化到mysql

Hangfire.Redis.StackExchange    持久化到Redis缓存

二、准备一下我们执行任务的业务代码

我这里准备一个工具类,也就是MailSmtp发送邮件(哔哔一下,该类直接从sugar官网直接copy过来的,特加强调)

然后实现一个消息服务类MessageService

 public class MessageService : IMessageService{public void SendEmailMsg(string msg){var mail = new MailSmtp();bool isSuccess = mail.Send("@163.com", "test", "1007425623@qq.com", "哈哈", msg);Console.WriteLine($"发送消息:{msg}");}}

三、找到Startup.cs,添加如下代码

 public void ConfigureServices(IServiceCollection services){services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);//services.AddHangfire(x => x.UseStorage(new MySqlStorage(//    //Configuration["ConnectionString"],//    new MySqlStorageOptions//    {//        TransactionIsolationLevel = IsolationLevel.ReadCommitted, // 事务隔离级别。默认是读取已提交。//        QueuePollInterval = TimeSpan.FromSeconds(15),             //- 作业队列轮询间隔。默认值为15秒。//        JobExpirationCheckInterval = TimeSpan.FromHours(1),       //- 作业到期检查间隔(管理过期记录)。默认值为1小时。//        CountersAggregateInterval = TimeSpan.FromMinutes(5),      //- 聚合计数器的间隔。默认为5分钟。//        PrepareSchemaIfNecessary = true,                          //- 如果设置为true,则创建数据库表。默认是true。//        DashboardJobListLimit = 50000,                            //- 仪表板作业列表限制。默认值为50000。//        TransactionTimeout = TimeSpan.FromMinutes(1),             //- 交易超时。默认为1分钟。//        TablePrefix = "Hangfire"                                  //- 数据库中表的前缀。默认为none//    })));//services.AddHangfire(x => x.UseStorage(new MemoryStorage()));services.AddHangfire(configuration =>{configuration.UseRedisStorage("");});services.AddTransient<IMessageService, MessageService>();}// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.public void Configure(IApplicationBuilder app, IHostingEnvironment env){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseMvc();app.UseHangfireDashboard();   //使用hangfire面板app.UseHangfireServer();      //启动hangfire服务RecurringJob.AddOrUpdate<IMessageService>(x => x.SendEmailMsg("================================Hangfire服务端定时任务================================"), Cron.Minutely());}

这个也很简单,就去Hangfire官网,跳到github上看readme就行了

在这里我采用的是使用redis来当我作业持久化的地址,同时开放出我的reids地址,有缘人看到这篇文章的时候可以直接拿着项目跑起来看到效果;

直接F5,在端口后面加上 /hangfire 查看效果;例如:http://localhost:5000/hangfire

这时候,我们的第一个任务《定时任务》(周期任务)就已经完成了;

接下来第二个《队列任务》(只执行一次),这也很简单;

四、添加控制器及对应的接口

 [Route("api/[controller]/[action]")][ApiController]public class DispatchController : ControllerBase{/// <summary>/// 添加一个任务到队列并立即执行/// </summary>/// <param name="jobDescriptor"></param>/// <returns></returns>[HttpPost]public JsonResult AddEnqueue(){try{var jobId = string.Empty;jobId = BackgroundJob.Enqueue<IMessageService>(x => x.SendEmailMsg("================================客户端添加的任务================================"));return new JsonResult(new { Flag = true, Message = $"Job:#{jobId}-已加入队列" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 添加一个延迟任务到队列/// </summary>/// <param name="jobDescriptor"></param>/// <returns></returns>[HttpPost]public JsonResult AddSchedule(){try{var jobId = string.Empty;jobId = BackgroundJob.Schedule(() => null, TimeSpan.FromMinutes(1));return new JsonResult(new { Flag = true, Message = $"Job:#{jobId}-已加入队列" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 添加一个定时任务/// </summary>/// <param name="jobDestriptor"></param>/// <returns></returns>[HttpPost]public JsonResult AddRecurring(){try{var jobId = string.Empty;RecurringJob.AddOrUpdate("", () => null, Cron.Hourly, TimeZoneInfo.Local);return new JsonResult(new { Flag = true, Message = $"Job:已加入队列" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 删除一个定时任务/// </summary>/// <param name="jobName"></param>/// <returns></returns>[HttpDelete("DeleteRecurring")]public JsonResult Delete(string jobName){try{RecurringJob.RemoveIfExists(jobName);return new JsonResult(new { Flag = true, Message = $"Job:{jobName}已删除" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}/// <summary>/// 触发一个定时任务/// </summary>/// <param name="jobName"></param>/// <returns></returns>[HttpGet("TriggerRecurring")]public JsonResult Trigger(string jobName){try{RecurringJob.Trigger(jobName);return new JsonResult(new { Flag = true, Message = $"Job:{jobName}已触发执行" });}catch (Exception ex){return new JsonResult(new { Flag = false, Message = ex.Message });}}}

什么,代码看着眼熟?恭喜你,记忆力相当可以,我复制某位大佬的,本文末会注明相关出处

这时候我们再F5启动,

好了,搞定了,本文到此结束,对于本文的类别,更合适的名字应该叫整合吧

demo源码:https://gitee.com/Jodro/Hangfire

本文相关链接:

https://blog.csdn.net/qinyuanpei/article/details/95936781

https://www.hangfire.io

.Net Core怎么使用Hangfire相关推荐

  1. Core 定时任务之HangFire

    ASP.NET Core 使用 Hangfire 很简单,首先,Nuget 安装程序包 > install-package Hangfire -pre 然后ConfigureServices添加 ...

  2. .Net Core 简单的Hangfire部署Demo

    什么是Hangfire 1.是分布式的后端作业调度框架,我们只需要关心业务逻辑代码,而不用关心调度机制持. 2.官方原文:在.NET和.NET Core应用程序中执行后台处理的简单方法.无需Windo ...

  3. .Net Core环境搭建Hangfire项目

    第一次搭建.Net Core环境的Hnagfire项目,记录下自己的经验,有问题望大家多多指点. 一.创建项目,添加引用 1.新建.Net Core Web应用程序,选择Web应用程序 2.添加项目引 ...

  4. .NET Core 部署IIS无法启动Hangfire方案

    [导读]不知道是否有童鞋遇到过将.NET Core部署到IIS上时,但Hangfire无法启动,自然而然也就导致作业无法良好运行的问题,本文给出两个方案,不知是否有完美解决方案,若有,请于留言中给出, ...

  5. .NET Core 学习资料精选:进阶

    2019.09月就要正式发布.NET 3.0了,对于前一篇博文<.NET Core 学习资料精选:入门>大家学的可还开心?这是本系列的第二篇文章:进阶篇,喜欢的园友速度学起来啊. 对于还在 ...

  6. hangfire支持mysql_快速入门 - Hangfire.HttpJob 中文文档

    先介绍下 Hangfire.HttpJob 自身引用的组件 Hangfire.AspNetCore (因为Hangfire.HttpJob是作为Hangfire的插件,Hangfire.AspNetC ...

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

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

  8. Hangfire在ASP.NET CORE中的简单实现

    hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNe ...

  9. .NET Core开源组件:后台任务利器之Hangfire

    一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的DI管理着生命周期,免去了在NF4.X环境中配置always ru ...

最新文章

  1. 被人恨,但感觉不错!
  2. SendTextMessage 等方便的消息发送函数
  3. flink 8 state checkpoint savepoint区别
  4. oracle12c复制bdf,Oracle 备份与恢复学习笔记(12)
  5. ewebeditor在上传文件时,总是提示“请选择一个有效的文件”,
  6. Android开始之 activity_lifecycle和现场保护
  7. 广播电视加速技术迭代,如何用新技术拥抱行业转型?
  8. docker nacos
  9. python将txt转为字符串_python做第一只小爬虫
  10. python列表推导式中使用if和if-else
  11. 制作stick侧边栏导航效果
  12. python给pdf加水印_用PDFlib给PDF添加水印(Python)
  13. Python制作某电商平台商品竞拍脚本,能自动定时、抢拍、购买
  14. php手机号批量分类,一个非常好的php实现手机号归属地查询接口类
  15. Python3图片转字符画
  16. java java.lang.string_无法将java.lang.String字段设置为java.lang.String
  17. 设计模式design
  18. 介绍一款开源的自动驾驶仿真模拟器-Carla
  19. 海康威视SDK登录失败,错误码为8
  20. 【揭秘】云服务器1M带宽实际下载速度是多少?

热门文章

  1. PHP ‘Array and string offset access syntax with curly braces is deprecated’ 错误的原因和解决办法...
  2. 前端维护项目该怎么做呢
  3. 什么是支付通道,一篇文章了解支付通道理念
  4. 服务器排性能行榜,服务器CPU性能排行榜天梯图(双路/三路/四路)
  5. 第三方士大夫士大夫士大夫士大夫士大夫
  6. python数据分析案例简单实战项目(一)--供应链销售数据分析
  7. 2019年第十届蓝桥杯真题解析 | 特殊数【Python】
  8. 双十一全零售领域狂欢 请了明星代言商家真的能赚到钱吗?
  9. openjudge 1.9.14 铺地毯
  10. 微信公众号编辑器哪个好