ASP.NET Core使用Hangfire定时发布文章
ASP.NET Core使用Hangfire实现定时任务
前言
也是上了5天班,终于迎来了休息,抽空更新下博客,然后就是下周一公司会对我进行考核,希望考核能通过吧!!!
然后我想给博客添加一个定时发布文章的功能,其实这个功能对于我的博客是没什么作用的,什么时候发都没什么人看。但是咱还是要有这个功能。
实现思路
我为文章表添加了一个Status状态属性,然后如果在上传文章的时候,添加了定时参数,那么就会进入定时任务的方法。首先无论是否选择定时发布,文章都会保存到数据库。Status状态默认为1,如果是定时发布文章的话,Status状态为0,当到达定时时间后将会执行定时任务,修改Status属性为发布也就是1。
实现步骤
第一步:安装Hangfire包
dotnet add package Hangfire
dotnet add package Hangfire.MemoryStorage //根据需求导入
第二步:配置服务
在配置文件中配置Hangfire
// 添加Hangfire服务
builder.Services.AddHangfire(configuration => configuration.UseMemoryStorage());
// 添加定时任务
builder.Services.AddHangfireServer();
// 使用Hangfire中间件
app.UseHangfireDashboard();
注意我这里是直接使用的内存UseMemoryStorage作为Hangfire的存储方式,这个项目还提供了很多比如SQLServer,Redis等,那么对应的Nuget包也不同,自行参考官方文档,链接在本文底部。
第三步:调度后台任务
首先是修改状态的代码
public void UpdateStatus(string id)
{
var post = _myDbContext.posts.FirstOrDefault(p => p.Id == id);
if (post != null)
{
post.Status = 1;
_myDbContext.SaveChanges();
}
}
Hangfire调用后台任务的方法是BackgroundJob.Schedule(),里面需要2个参数,分别是需要定时执行的方法和延迟任务执行的时间。
...上方逻辑代码,无需展示
if (publishTime.HasValue && publishTime.Value > DateTime.Now)
{
// 计算延迟时间
var delay = publishTime.Value - DateTime.Now;
post.Status = 0;//未发布
// 使用Hangfire调度后台任务
BackgroundJob.Schedule( () => UpdateStatus(post.Id) ,delay);
}
else
{
post.Status = 1; //发布
}
// 存入数据库
await _myDbContext.SaveChangesAsync();
实现效果
首先发送请求,可以看到启动了定时任务

然后查询数据库,可以看到Status为0。

然后在08分的时候,Status变成了1,也就是发布

然后也是可以看到执行了Update语句

管理后台也是加了个状态栏

参考资料
- HangfireIO/Hangfire:一种在.NET和.NET Core应用程序中执行后台作业处理的简单方法。无需 Windows 服务或单独的进程 (github.com) https://github.com/HangfireIO/Hangfire
ASP.NET Core使用Hangfire定时发布文章的更多相关文章
- [翻译] ASP.NET Core 2.1.0 发布
原文: ASP.NET Core 2.1.0 now available 今天,我们很高兴可以发布 ASP.NET Core 2.1.0!这是我们 .NET平台下开源的.跨平台的 Web 框架的最新版 ...
- Tinkphp定时发布文章的教程
第一步:在文章表中加一个字段,用来保存定时发布的时间 假定我把这个字段设为 push_time 默认为 0 第二步:写一个方法来检查文章列表,把文章列表到时间的文章改为发布状态 //定时发布文章 pu ...
- .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线
Powered by ASP.NET Core on Linux! 我们全站的 .NET Core 迁移工作如火如荼,这是我们今年上半年的重要工作. 今天我们终于完成了博问产品(q.cnblogs.c ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...
- [亲测]ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- ASP.NET Core 使用 Hangfire 定时任务
定时任务组件,除了 Hangfire 外,还有一个 Quarz.NET,不过 Hangfire .NET Core 支持的会更好些. ASP.NET Core 使用 Hangfire 很简单,首先,N ...
- [亲测]七步学会ASP.NET Core 2.0怎么发布/部署到Ubuntu Linux服务器并配置Nginx反向代理实现域名访问
前言 ASP.NET Core 2.0 怎么发布到Ubuntu服务器?又如何在服务器上配置使用ASP.NET Core网站绑定到指定的域名,让外网用户可以访问呢? 步骤 第1步:准备工作 一台Liun ...
- Asp.Net Core 集成 Hangfire 配置使用 Redis 存储
Hangfire 官方支持 MSSQL 与 Redis(Hangfire.Pro.Redis) 两种 ,由于我的数据库是 MYSQL ,粗略查询了一下文档,现在对 .NET Core 支持的并不够好, ...
- 从技术上分析八叉网www.xxxxxxxxvideos.com的自动定时发布文章功能是怎么实现的
做网站开发的都需要用到网站广告自动定时发布功能,也就是说,编辑在网站后台把文章编写好之后,设置发布时间,点确定后发布,这时在网站前台访客是看不到这篇文章的,必须要等到文章设置的发布时间之后才能看到.八 ...
- ASP.NET Core Web应用在发布时选择是否对视图进行编译
原文:ASP.NET Core Web应用在发布时选择是否对视图进行编译 在我们发布ASP.NET Core Web应用程序时,选择以文件形式发布,发布方法选择文件系统 默认情况下,会把Views的视 ...
随机推荐
- 18.基于Consul的服务发现和ConsulManager管理
192.168.10.14 prometheus.consul 192.168.10.100 各类服务 一.基于Consul的服务发现 Consul 是由 HashiCorp 开发的一个支持多数据中心 ...
- ITIL4中的关键概念
1.价值和价值共创 什么是价值 通俗表达:这有啥用? 正式表达:这能带来什么益处或起什么作用? 反问式求证: 假如没有的话,会有什么后果? 具体情境提问:如果缺少IT运维人员,业务系统会面临怎样的状况 ...
- golang向上取整、向下取整和四舍五入
一.概述 官方的math 包中提供了取整的方法,向上取整math.Ceil() ,向下取整math.Floor() 二.用法 package main import ( "fmt" ...
- 1.简单的C语言程序
简单的C语言程序 什么是计算机程序? 什么是计算机语言? 所谓程序,就是一组计算机能识别和执行的指令. 什么是计算机语言? 机器语言(0,1 '低级语言'),汇编语言(符号化 '低级语言'),高级语言 ...
- SQL中常用的字符串REPLACE函数和LEN函数详解!
首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...
- uniapp有意思的api之openSetting
点击查看代码 <details> <summary>解决用户拒绝授权问题</summary> uni.openSetting({ success(res) { co ...
- 让创意在幻觉中肆虐: 认识Illusion Diffusion AI
人工智能新境界 在不断发展的人工智能领域,一款非凡的新工具应运而生,它能将普通照片转化为绚丽的艺术品.敬请关注Illusion Diffusion,这是一个将现实与想象力完美融合的AI驱动平台,可创造 ...
- C语言:生成单词列表----使用单链表实现
解决之前用结构体数组导致内存过剩问题,使用动态分配内存优化单词列表. txt文本内容不允许出现其他字符形式,这个仅限于判断在txt网页文件已经删除了超链接等,文本里面只允许出现单词才能进行判断和进行单 ...
- linux下常用的快捷键和$参数
1.下面介绍两个在linux下非常有用的$参数 2.!$ 表示引用上一个命令的最后一个参数,例子如下: [root@node5 ~]# echo '!$的作用是引用上一个命令的最后一个参数' > ...
- CSS——圆角
例子1: <!DOCTYPE html> <html lang="en"> <head> <style> div { width: ...