开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用
程序员文章站
2022-04-14 18:47:25
项目介绍: Hangfire:是一个开源的job调度系统,支持分布式JOB!! Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的。可以独立更新Hangfire版本不影响! 该组件已被Hangfire官方采纳,在Hangfire官网可以查到 ......
项目介绍:
hangfire:是一个开源的job调度系统,支持分布式job!!
hangfire.httpjob 是我针对hangfire开发的一个组件,该组件和hangfire本身是独立的。可以独立更新hangfire版本不影响!
该组件已被hangfire官方采纳,在hangfire官网可以查到:
开源地址:
https://github.com/yuzd/hangfire.httpjob
该项目目的是:
剥离job调度和业务
共有三篇文章
开源分布式job系统,调度与业务分离-如何创建一个计划httpjob任务
开源分布式job系统,调度与业务分离-如何创建周期性的httpjob任务
开源分布式job系统,调度与业务分离-httpjob.agent组件介绍以及如何使用
本篇教程:如何创建一个计划httpjob任务
计划httpjob任务的定义
一次性的job 只运行一次
1. 进入hangfire的后台 点击 左侧栏【计划】
会看到一个按钮名称叫 【新增常规作业】如下图所示:
2. 点击【新增常规作业】会出现一个json编辑器
如下图所示
json编辑器的参数说明如下
字段名称 | 备注 |
---|---|
jobname | 你给这个httpjob起的名称【必填项】 |
method | 这个httpjob的请求方式 "get" 或者 "post" 【必填项】 |
contenttype | 这个httpjob的请求contenttype 默认"application/json" 【必填项】 |
url | 这个httpjob的请求url 【必填项】 |
delayfromminutes | 需要延迟执行的分钟,注意:0 代表立刻执行; -1代表只能手动触发; >=1代表延迟分钟数 【必填项】 |
data | 这个httpjob在method=“post”的时候可以指定post的内容,可以是一个对象也可以是一个string或者其他类型 |
timeout | 这个httpjob请求的超时时间(单位是毫秒 例如5000 代表是5秒) |
basicusername | 这个httpjob请求需要启用basic认证时设置的username |
basicpassword | 这个httpjob请求需要启用basic认证时设置的密码 |
enableretry | 失败的时候(比如超时 远程服务器请求错误等)是否启用重试 默认false ,如果设置true 会重试最大3次 |
sendsucmail | 这个httpjob请求无异常的时候是否发送通知邮件 默认false |
sendfaimail | 这个httpjob请求异常的时候是否发送通知邮件 默认true |
设置通知邮件地址 如果有多个用半角逗号隔开 | |
agentclass | 如果是agentjob开发的httpjob 则需要填写,填写的是完整的类型格式{namespace},{程序集的名称} 例如:testhangfireagent.jobs,testhangfireagent |
3.举例
我开发了一个订单支付超时检测 接口 访问地址是: http://localhost:5000/checkorder 访问方式是post 访问的参数是 orderid 接口有basicauth验证 用户名是admin 密码是test 希望计划 15分钟后执行 看有没有支付 没有支付 就把订单状态改成取消 如果接口访问失败那么通知邮箱 1877682825@qq.com # 那么对应如下填写: { "jobname": "checkorder", //job名称 "method": "post", //http请求的方法 "contenttype": "application/json", //http参数类型 "url": "http://localhost:5000/checkorder",//接口的地址 "delayfromminutes": 15, //15分钟后执行 "data": { "orderid":123456 //传的参数 orderid }, "timeout": 5000, //http调用超时设置 "basicusername": "admin", //http调用的basicauth "basicpassword": "test", //http调用的basicauth "enableretry": false, "sendsucmail": false, "sendfaimail": true, //http失败时发邮件通知 "mail": "1877682825@qq.com", //http调用失败通知我 "agentclass": "" }
点击【提交】添加job 成功如下图所示:
可以看到会在15分钟后执行该job
针对该job 可以看到有四个按钮
按钮名称 | 说明 |
---|---|
加入队列 | 如果你想让这个job立即执行 可以点击该按钮 |
删除选中 | 如果你想删除这个job 可以点击该按钮 |
带参数执行 | 这个按钮的作用是 重新定义json里面的data的值 并立即执行的意思,在agentjob场景下使用较多 |
停止job | 这个只能在agentjob才可以使用 |
job到时执行 如下图所示
job执行完毕 在完成列表可以查询
点击job编号进入job详情页查看具体执行情况和日志
也可以在tag页面进行查看
说明:tag页面是按jobname进行分组查询的
点击某一个jobname 进入该jobname下所有的运行完成的job列表
上一篇: 约瑟夫斯问题