天天看点

Hangfire 使用笔记

“巨人们”的地址

Hangfire Mysql:

https://github.com/arnoldasgudas/Hangfire.MySqlStorage 在获取set表数据的sql语句有bug

Hangfire Console:

https://github.com/pieceofsummer/Hangfire.Console

站在巨人们的肩膀开始我的整合啦:

主要用在以下场景:

比如:

1客人下单,超过最晚支付时间就自动取消订单

2复杂的需要花一定时间的计算,然后还得发推送通知

3 通过延迟和循环任务分批群发短信或邮件

等等

示意图为

Hangfire 使用笔记

首先我封装了hangfire在server端加入api功能,封装了以下:

1可以创建一个立刻执行的后台job

2可以创建一个可延期执行的job

3可以创建一个定时周期性的job

4可以创建一个类似于Task的Continue功能的有执行顺序的Job。例如A执行完了执行B,B执行完了执行C。。。

封装了这层API这样就统一了 job的入口。

并且规定好了job的参数,

因为具体job的执行是不在 hangfireserver里面的。

hangfireserver是统一管理job和发起执行job的请求角色。

那么hangfireserver是怎么知道往哪里发http请求去执行job,带什么参数的呢

都是在创建job的时候就约定好了。

例如 客人下单 时 调用 创建一个可延迟执行的job 例如延迟15分钟

调用创建的时候 传入的对象有发起http请求的一些参数例如

URL:执行具体job的api地址 也就是如上图的web api excute

Method 是get还是 post

contenttype啊之类的。

因为虽然是内网 但是我也不想直接暴露给所有人 所以我额外规定了web api excute都要统一加了 basic认证。。

创建成功后

这个时候就可以在dashbord上看见计划有一个任务

Hangfire 使用笔记

过了15分钟后开始执行这个job,就发起请求,

下面的蓝色部分就是 hangfire console的作用。

把执行的参数 结果等都保存下来。。查看的时候一目了然

Hangfire 使用笔记

目前还存在一些不方便的地方:

dashbord不支持查询功能。。

我就改了一下源码

https://github.com/yuzd/Hangfire.Core.Extend

https://github.com/yuzd/Hangfire.Mysql.Extend

新增了对于Netcore的支持 :

https://github.com/yuzd/Hangfire.HttpJob

效果如下

Hangfire 使用笔记
Hangfire 使用笔记
2016-12-25平安夜新增了dashbord新增作业和周期性作业的入口
Hangfire 使用笔记
Hangfire 使用笔记

2015-12-26新增了corn表达式在线生成的功能

至此 我想要的功能基本满足了 yeah!

Hangfire 使用笔记
有兴趣的同学可以看下 我最新开源的Hangfire.HttpJob项目 : https://github.com/yuzd/Hangfire.HttpJob/wiki

Hangfire.HttpJob究竟是干嘛的

  • 传统使用Hangfire都是把JOb的处理逻辑代码写在和Hangfire的同一个工程!
  • 缺点: 这样就耦合在了一起,如果业务线增大,会导致每个业务线的Job处理逻辑都得和Hangfire耦合在一起!发布的时候所有业务线Job都得暂停调度

  • 而使用了Hangfire.HttpJob的话 就是把Hangfire的服务拓展成可以把Job的处理逻辑代码写在别的工程里面(以webapi的形式暴露给Hangfire去调度)
  • 优点:这样就解耦了Hangfire和业务处理逻辑,业务job开发者可以忽略Hangfire的存在!不同的业务线分开不同的JobAgent可以分别部署,发布互不影响

Hangfire.HttpJob

是对Hangfire的一个扩展插件,利用Hangfire.HttpJob可以快速搭建分部署Job调度Server。

特点是:

  1. 业务与调度完全分离。
  2. 支持定点执行 延迟执行 周期性循环执行,支持秒级别
  3. 配合JobAgent组件可以实现Job管理 监控 日志等

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,转载文章之后须在文章页面明显位置给出作者和原文连接,谢谢。