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

任务组件HangFire

6849人阅读 2021/4/9 18:10 总访问:297365 评论:0 收藏:0 手机
分类: .NET

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的形式 尽可能的使用服务

  1. //Startup.cs
  2. //引入HangFire.AspNetCore、HangFire.PostgreSql
  3. public void ConfigureServices(IServiceCollection services)
  4. {
  5. services.AddRazorPages();
  6. services.AddHangfire(o => o.UsePostgreSqlStorage("DATABASE=Hangfire;HOST=localhost;PASSWORD=123456;USER ID=postgres;PORT=5432;Pooling=true"));
  7. }
  8. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  9. {
  10. app.UseHangfireServer();
  11. app.UseHangfireDashboard(); // 访问"/hangfire" 使用仪表盘 可视化执行任务
  12. //即时执行,创建时执行仅一次
  13. BackgroundJob.Enqueue<SayHello>(job => job.Hello());
  14. //延迟执行,根据参数
  15. BackgroundJob.Schedule<SayHello>(jobs => jobs.DelayHello(), DateTimeOffset.UtcNow.AddMinutes(1));
  16. //周期性执行任务
  17. RecurringJob.AddOrUpdate<SayHello>("周期任务1",jobs=> jobs.loopHello(), Cron.Minutely());
  18. /*
  19. * 周期性任务也可以使用CRON表达式来配置
  20. * Cron表达式:是由七子表达式组成,描述个别细节的时间表:秒 分钟 小时 日 月 星期 年(年可省略)
  21. * RecurringJob.AddOrUpdate(() => Console.Write("Hello!"), "0 */1 * * * ?"); //每分钟执行一次
  22. *
  23. */
  24. }
  1. public class SayHello
  2. {
  3. public void Hello()
  4. {
  5. Console.WriteLine("");
  6. Console.WriteLine($"{DateTime.Now},Hello");
  7. }
  8. public void DelayHello()
  9. {
  10. Console.WriteLine($"{DateTime.Now},Hello !!!");
  11. }
  12. public async Task loopHello()
  13. {
  14. Console.WriteLine($"{DateTime.Now},Hello World!!!");
  15. }
  16. }

结果:

仪表盘:


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价