-
Notifications
You must be signed in to change notification settings - Fork 187
02.如何创建一个周期性的HttpJob
yuzd edited this page Nov 5, 2020
·
11 revisions
- 是多次运行的job 采用Cron表达式进行定义运行规则
- 最新版的hangfire已支持 6位数的Cron表达式(支持到秒级)
- 但是我在hangfire的dashbord扩展的Cron生成页面还不支持到秒级别(大家可以在google找可以生成6位的网站工具)
- 如果你遇到执行周期没有按照你的Cron表达式来 请查看 https://github.com/yuzd/Hangfire.HttpJob/issues/82
如下图所示:
针对周期性作业 可以看到有三个按钮
按钮名称 | 说明 |
---|---|
新增周期性作业 | 新增一个周期性httpjob作业 |
编辑周期性作业 | 如果你重新编辑该周期性httpjob作业内容可以点击该按钮 |
Cron表达式生成 | 跳转到Cron表达式生成页面 |
点击【Cron表达式生成】 进入Cron表达式生成页面 如下图:
例如 我想要 每天晚上8点05分执行
得出结果:【5 20 * * *】
点击【新增周期性作业】按钮 会出现一个json编辑器
字段名称 | 备注 |
---|---|
JobName | 你给这个httpjob起的名称(别名)【必填项】 |
RecurringJobIdentifier | 唯一id 如果你不填的话 就等于JobName 【周期性job的修改是根据这个唯一id来修改的,如果你编辑修改某个周期性job的时候修改了这个id那么提交修改会创建一个新的周期性job】 |
Method | 这个httpjob的请求方式 "get" 或者 "post" 【必填项】 |
ContentType | 这个httpjob的请求ContentType 默认"application/json" 【必填项】 |
Url | 这个httpjob的请求url 【必填项】 |
Cron | Cron表达式 可以先用【Cron表达式生成】功能生成好,如果为空则代表只能是手动出发执行! |
Data | 这个httpjob在Method=“post”的时候可以指定post的内容,可以是一个对象也可以是一个string或者其他类型 |
Timeout | 这个httpjob请求的超时时间(单位是毫秒 例如5000 代表是5秒) |
BasicUserName | 这个httpjob请求需要启用basic认证时设置的username |
BasicPassword | 这个httpjob请求需要启用basic认证时设置的密码 |
EnableRetry | 失败的时候(比如超时 远程服务器请求错误等)是否启用重试 默认false |
RetryTimes | 错误尝试次数自定义,EnableRetry=true的时候启用 |
RetryDelaysInSeconds | 失败重试区间,半角逗号隔开,EnableRetry=true的时候启用 |
SendSucMail | 这个httpjob请求无异常的时候是否发送通知邮件 默认false |
SendFaiMail | 这个httpjob请求异常的时候是否发送通知邮件 默认true |
设置通知邮件地址 如果有多个用半角逗号隔开 | |
AgentClass | 如果是==AgentJob开发的httpjob== 则需要填写,填写的是完整的类型格式{namespace},{程序集的名称} 例如:TestHangfireAgent.Jobs.XXXJOB,TestHangfireAgent |
AgentTimeout | 如果是AgentJob开发的job 可以配置允许job在agent里异步运行允许的最大时长。为0代表不限制 |
CallbackEL | el表达式来判断返回体是否成功还是失败,请查看wiki专门针对这个功能的介绍 |
比如
每天晚上8点执行一次查询订单已完成超xx小时了(xx作为参数)
但是还没有点评的
发短信让催点评
接口地址:http://localhost:5000/scoreOrder
访问方式是POST
接口有basicAuth验证 用户名是admin 密码是test
# 那么对应如下填写:
{
"JobName": "scoreOrder", //Job名称
"Method": "POST", //http请求的方法
"ContentType": "application/json", //http参数类型
"Url": "http://localhost:5000/scoreOrder",//接口的地址
"Cron": "5 20 * * *", //每天晚上8点05分执行
"Data": {
"Hour":48 //传的参数超过48小时
},
"Timeout": 5000, //http调用超时设置
"BasicUserName": "admin", //http调用的basicAuth
"BasicPassword": "test", //http调用的basicAuth
"EnableRetry": false, //http调用失败的错误重试
"RetryTimes" : 3 , //错误尝试次数自定义,EnableRetry=true的时候启用
"RetryDelaysInSeconds" : "5,20,30" //失败重试区间,半角逗号隔开,EnableRetry=true的时候启用
"SendSucMail": false,
"SendFaiMail": true, //http失败时发邮件通知
"Mail": "[email protected]", //http调用失败通知我
"AgentClass": ""
}
点击【提交】
我刚才设置的是20:05分执行
目前时间是19:50
正好是还有15分钟就要执行了 说明Cron表达式没有问题
按钮名称 | 说明 |
---|---|
立即执行 | 如果你希望不要等到8点05想立即就执行可以点击它 |
停止或开始任务 | 如果你希望暂停这个周期性job 可以点它,点完之后再次点击就是开启 |
编辑周期任务 | 如果你刚刚添加的参数有错误,可以点击这个按钮重新编辑提交 |
如果一个周期性job是暂停的 会以红色字体展示
注意:点击停止就会把当前job的cron设置为空也就会暂停hangfire对于这个job的调度了。
注意:点击开始,会重新恢复你之前设置的cron,则hangfire就会重新调度了
点击提交修改
说明:Tag页面是按jobName进行分组查询的
点击某一个jobName 进入该jobName下所有的运行完成的job列表