开源分布式Job系统,调度与业务分离如何创建周期性的HttpJob任务

coding

项目介绍:

Hangfire:是一个开源的job调度系统,支持分布式JOB!!

Hangfire.HttpJob 是我针对Hangfire开发的一个组件,该组件和Hangfire本身是独立的。可以独立更新Hangfire版本不影响!

该组件已被Hangfire官方采纳,在Hangfire官网可以查到:

开源地址:

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

该项目目的是:

剥离Job调度和业务

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管理 监控 日志等

共有三篇文章

开源分布式Job系统,调度与业务分离-如何创建一个计划httpjob任务

 

开源分布式Job系统,调度与业务分离-如何创建周期性的HttpJob任务

 

开源分布式Job系统,调度与业务分离-HttpJob.Agent组件介绍以及如何使用



 

本篇教程:如何创建一个周期性的HttpJob任务的

周期性的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 ,如果设置true 会重试最大3次

SendSucMail

这个httpjob请求无异常的时候是否发送通知邮件 默认false

SendFaiMail

这个httpjob请求异常的时候是否发送通知邮件 默认true

Mail

设置通知邮件地址 如果有多个用半角逗号隔开

AgentClass

如果是AgentJob开发的httpjob 则需要填写,填写的是完整的类型格式{namespace},{程序集的名称} 例如:TestHangfireAgent.Jobs,TestHangfireAgent

举例

比如

每天晚上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 * * *", //每天晚上805分执行

"Data": {

"Hour":48//传的参数超过48小时

},

"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列表可以查

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

目前时间是19:50

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

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

按钮名称

说明

立即执行

如果你希望不要等到8点05想立即就执行可以点击它

停止或开始任务

如果你希望暂停这个周期性job 可以点它,点完之后再次点击就是开启

编辑周期任务

如果你刚刚添加的参数有错误,可以点击这个按钮重新编辑提交

停止或开始任务

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

编辑周期任务

点击提交修改

周期性job执行

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

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

也可以在Tag页面进行查看

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

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

以上是 开源分布式Job系统,调度与业务分离如何创建周期性的HttpJob任务 的全部内容, 来源链接: utcz.com/z/510063.html

回到顶部