如何创建一个周期性的 HttpJob

优质
小牛编辑
127浏览
2023-12-01

周期性的HttpJob任务的定义

  • 是多次运行的job 采用Cron表达式进行定义运行规则

注意事项

  • 最新版的hangfire已支持 6位数的Cron表达式(支持到秒级)
  • 但是我在hangfire的dashbord扩展的Cron生成页面还不支持到秒级别(大家可以在google找可以生成6位的网站工具)

1. 进入hangfire的后台 点击 上侧栏【周期性作业】

如下图所示:

针对周期性作业 可以看到有三个按钮

按钮名称说明
新增周期性作业新增一个周期性httpjob作业
编辑周期性作业如果你重新编辑该周期性httpjob作业内容可以点击该按钮
Cron表达式生成跳转到Cron表达式生成页面

1. 生成Cron表达式

点击【Cron表达式生成】 进入Cron表达式生成页面 如下图:

例如 我想要 每天晚上8点05分执行

得出结果:【5 20 * * *】

2.新增周期性作业

点击【新增周期性作业】按钮 会出现一个json编辑器

json 编辑器的参数说明如下

字段名称备注
JobName你给这个httpjob起的名称【必填项】
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
Mail设置通知邮件地址 如果有多个用半角逗号隔开
AgentClass如果是==AgentJob开发的httpjob== 则需要填写,填写的是完整的类型格式{namespace},{程序集的名称} 例如:TestHangfireAgent.Jobs.XXXJOB,TestHangfireAgent
CallbackELel表达式来判断返回体是否成功还是失败,请查看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": "1877682825@qq.com",              //http调用失败通知我
  "AgentClass": ""
}

点击【提交】

添加成功 在job列表可以查

我刚才设置的是20:05分执行

目前时间是19:50

正好是还有15分钟就要执行了 说明Cron表达式没有问题

对于周期性job 有3个按钮可以操作

按钮名称说明
立即执行如果你希望不要等到8点05想立即就执行可以点击它
停止或开始任务如果你希望暂停这个周期性job 可以点它,点完之后再次点击就是开启
编辑周期任务如果你刚刚添加的参数有错误,可以点击这个按钮重新编辑提交

停止或开始任务

如果一个周期性job是暂停的 会以红色字体展示


注意:点击停止就会把当前job的cron设置为空也就会暂停hangfire对于这个job的调度了。
注意:点击开始,会重新恢复你之前设置的cron,则hangfire就会重新调度了

编辑周期任务

点击提交修改

周期性job执行

周期性job执行完毕 在完成列表可以查询

点击job编号进入job详情页查看具体执行情况和日志

也可以在Tag页面进行查看

说明:Tag页面是按jobName进行分组查询的

点击某一个jobName 进入该jobName下所有的运行完成的job列表