排名
17
文章
40
粉丝
16
评论
21
Linq or Sql 取树末级节点
剑轩 : 这个方法是真的帅!
Python实例 2-12306抢票(二) 下单
18335584353 :
哥。我也是总返回url":"/leftTicket/init","...
Python实例 2-12306抢票(一) 登陆
瑾语 : 第三次评论
Visual Studio小技巧
剑轩 : [斜眼笑][斜眼笑]开会完了认真看了一遍
C#网络流读取(图片)
风清月 : 把一个图片放到字节数组里边[发呆](`・ω・´)
C#与Java二进制编码转换,补码
风清月 : 我勒个擦.....有时间这种问题很坑很难发现哇o(╥﹏╥)o
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

HangFire
文档地址:https://docs.hangfire.io/en/latest/getting-started/index.html
HangFire类似Quartz.NET的任务组件,核心组件服务端、客户端、持久化存储,可与大多数.NET平台一起使用,客户端负责创建后台作业并将其保存到存储中。后台作业是应该在当前执行上下文之外执行的工作单元,例如在后台线程,其他进程中,甚至在不同的服务器上执行-借助Hangfire,即使没有其他配置,也可以实现所有工作。
- 支持最小的周期单位为分钟
- 持久化保存任务,还可在仪表盘中手动执行任务
- 重试机制(注意:由于是持久化存储的,所有当你程序停止后没有删除任务,程序重新启动后 仍会尝试继续前面的任务)
- 分布式部署
- 可扩展性
组件:
- HangFire 是程序包名称和主程序包,其中包括所有需要的依赖项.在这种情况下,此主程序包针对.NET框架.
- HangFire.Core 是包含核心组件的程序包,该程序包的所有变体都可能依赖于这些组件.
- HangFire.AspNetCore 是支持.NET Core的扩展 (Hangfire是持久化任务,所以还需要一个持久化扩展存储,sqlserver、mysql、redis等,会自动在库中创建表)
.NET Core中使用: IIS8.0以下配置预加载比较麻烦 会由于回收机制导致任务停止运行 建议别用asp.net的形式 尽可能的使用服务
//Startup.cs
//引入HangFire.AspNetCore、HangFire.PostgreSql
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddHangfire(o => o.UsePostgreSqlStorage("DATABASE=Hangfire;HOST=localhost;PASSWORD=123456;USER ID=postgres;PORT=5432;Pooling=true"));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHangfireServer();
app.UseHangfireDashboard(); // 访问"/hangfire" 使用仪表盘 可视化执行任务
//即时执行,创建时执行仅一次
BackgroundJob.Enqueue<SayHello>(job => job.Hello());
//延迟执行,根据参数
BackgroundJob.Schedule<SayHello>(jobs => jobs.DelayHello(), DateTimeOffset.UtcNow.AddMinutes(1));
//周期性执行任务
RecurringJob.AddOrUpdate<SayHello>("周期任务1",jobs=> jobs.loopHello(), Cron.Minutely());
/*
* 周期性任务也可以使用CRON表达式来配置
* Cron表达式:是由七子表达式组成,描述个别细节的时间表:秒 分钟 小时 日 月 星期 年(年可省略)
* RecurringJob.AddOrUpdate(() => Console.Write("Hello!"), "0 */1 * * * ?"); //每分钟执行一次
*
*/
}
public class SayHello
{
public void Hello()
{
Console.WriteLine("");
Console.WriteLine($"{DateTime.Now},Hello");
}
public void DelayHello()
{
Console.WriteLine($"{DateTime.Now},Hello !!!");
}
public async Task loopHello()
{
Console.WriteLine($"{DateTime.Now},Hello World!!!");
}
}
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价