zoukankan      html  css  js  c++  java
  • 开源分布式Job系统,调度与业务分离-如何创建一个计划HttpJob任务

    项目介绍:

    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 只运行一次

    1. 进入hangfire的后台 点击 左侧栏【计划】

    会看到一个按钮名称叫 【新增常规作业】如下图所示: image

    2. 点击【新增常规作业】会出现一个json编辑器

    如下图所示 image

    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
    Mail 设置通知邮件地址 如果有多个用半角逗号隔开
    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 成功如下图所示:

    image

    可以看到会在15分钟后执行该job

    image

    针对该job 可以看到有四个按钮

    按钮名称说明
    加入队列 如果你想让这个job立即执行 可以点击该按钮
    删除选中 如果你想删除这个job 可以点击该按钮
    带参数执行 这个按钮的作用是 重新定义JSON里面的Data的值 并立即执行的意思,在AgentJob场景下使用较多
    停止Job 这个只能在AgentJob才可以使用

    job到时执行 如下图所示

    image

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

    image

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

    image

    也可以在Tag页面进行查看

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

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

    image

  • 相关阅读:
    python的特点
    epoll理解(转)
    数据库存储过程、触发器、连接
    Mysql的四种隔离级别
    linux指令
    利用asyncio(支持异步io)和协程实现单线程同步
    ubuntu安装codeblocks
    临界区与互斥量区别
    单链表的简单操作
    hdu 5475 An easy problem(暴力 || 线段树区间单点更新)
  • 原文地址:https://www.cnblogs.com/yudongdong/p/10942028.html
Copyright © 2011-2022 走看看