• hangfire+bootstrap ace 模板实现后台任务管理平台


    前言

    前端时间刚开始接触Hangfire就翻译了一篇官方的教程[翻译+山寨]Hangfire Highlighter Tutorial,后来在工作中需要实现一个异步和定时执行的任务管理平台,就结合bootstrap ace模板和hangfire实现了一下。效果图如下:

    遇到的坑

    1.Hangfire的任务持久化很耗性能

    生产环境部署时数据库Hangfire相关表已经手动创建好,可能忽略了哪些东西,站点运行时还是要创建,因为DBA给的权限没有Create所以报错了。最好的方案是给个大点的权限让Hangfire自己去创建管理表。

    由于权限不够所以想改用(localdb)v11 存取任务持久化数据,接着问题又来了,怎么运行localdb?这里有个方案LocalDB在IIS上如何成功配置,需要权限,果断放弃。实在不行就把任务数据持久化到内存吧,顺利上线了。少量测试时没发现问题,当我创建了68W个任务时,发现内存占用了2.6G,cpu也一直在80%以上。本来以为这么大内存是我的Job导致的,首先想到如果IIS重启了任务信息不能继续是个大问题,所以不得不找运维商量一下把这个任务相关表创建到另外一个我们自己管理的数据库上(另外一台机器)。等配置好数据库连接重新添加68W个任务时发现,应用服务器的内存才300多M,任务存储数据库的物理文件有2G多,数据库的cpu占用也上升了不少。这才意识到Hangfire的任务持久化是很耗性能的,同时也庆幸没有和应用数据放在一个数据库中。

    2.Hangfire Dashboard 远程访问

    默认情况下Hangfire 只允许本机访问Dashboard ,所以部署在服务器上之后就不能像本地一样实时查看任务状态了。解决方案 关于 hangfire 的权限问题

    3.修改Hangfire的重试次数和并发个数

         //设置Hangfire执行Job失败后的尝试次数,默认值是10
                 GlobalJobFilters.Filters.Add(new AutomaticRetryAttribute(){Attempts = 3});
    
                //设置Hangfire并发处理Job的个数,默认值是 cpu个数*5
                var options = new BackgroundJobServerOptions {WorkerCount = 10};
                app.UseHangfireServer(options);

    4.如何删除未执行的任务

    还没找到方法

    5.定时任务只支持到分钟,不能按秒控制。(它的精度没有那么高,所以需要秒级别的还是采用其它框架吧) 每10分钟执行一次的表达式: 0/10 * * * *

    Hangfire的牛逼功能

    0.远程查看任务执行状态

    1.代码异常直接可以从Dashboard面板中查看堆栈

    2.任务可以有返回值,在Dashboard的面板中也可以看到

    3.hangfire支持多个server,还没研究怎么用,以后用到再补充

    应用案例

    1.重庆时时彩和新疆时时彩的开奖数据采集

    有用的链接:

    使用 Hangfire 如何知道那個 Job 執行了多久呢

    使用 Hangfire 來處理非同步的工作

    关于 hangfire 的权限问题

  • 相关阅读:
    构建调试Linux内核网络代码的环境MenuOS系统
    关于iOS开发证书的一些总结(很有用)
    iOS原型模式
    iOS不用调用,running time自动执行方法
    关于网络设计服务结构的一些理解
    iOS 6.0之后支持一个页面横屏的方法
    iOS返回一个前面没有0,小数点后保留两位的数字字符串
    CoreData总结
    分享一个复用代码块的博客
    分享一个可以打开沙盒的软件
  • 原文地址:https://www.cnblogs.com/zeroes/p/hangfire-taskmanager.html
Copyright © 2020-2023  润新知