任务失败告警

场景描述

定时任务调用失败,发送通知给某人

实现步骤

1 定义接收通知服务请求

定义服务请求,请求方法POST。

请求参数

  • jobid为任务ID,调用时使用调度中心的环境变量${jobId}获取
  • executeNumber为执行次数,调用时使用调度中心的环境变量${executeNumber}获取
  • 请求体参数是必须的,为调度中心发送过来的定时任务执行情况,结构如下

      {
          "httpStatus": "200", //http的返回状态码
          "response": { 
              "status": "failed", //任务状态: failed——失败  succeed——成功 finalFailed——最终失败 finalSucceed——最终成功
              "message": "同步调用request成功...", //提示信息
              "error": "error1", //
              "progress": "30%", //任务进度
              "data": {} //定时服务返回的数据
          }
      }
    

2 从市场下载jobsClient组件

3 设置依赖

引入com.justep.cloud jobs-client 1.0.0包

4 写代码

同步定时任务调度中心返回示例如下

{
    "response": {
        "data": {
            "data": "OK"//定时任务返回的数据
        },
        "progress": "100%",
        "message": "同步调用request成功...",
        "status": "finalSucceed"
    },
    "httpStatus": 200
}

异步定时任务,返回信息由checkUrl或feedbackUrl返回。

接收通知服务的逻辑是:从调度中心返回的结果中获取任务执行情况,判断状态为最终失败(也可以根据定时任务返回的数据进行判断)则发送消息,代码如下

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.justep.cloud.job.client.common.entity.HttpInvokeResult;
    import com.justep.util.SpringWebUtil;
    import com.justep.util.net.ServiceUtil;

    public String receiveNotify(String results,String jobId,String executeNumber) throws Exception {
        //从调度中心返回的结果中获取任务执行情况
        HttpInvokeResult ret = JSON.parseObject(results, HttpInvokeResult.class);
        int httpStatus = ret.getHttpStatus();
        Object res = ret.getResponse();
        Map entity = (Map)res;
        String data = entity.get("data").toString();
        String progress = entity.get("progress").toString();
        String message = entity.get("message").toString();
        String status = entity.get("status").toString();

        System.out.println("jobId-->"+ jobId);
        System.out.println("executeNumber-->"+ executeNumber);
        String jsonStr = JSON.toJSONString(results);
        System.out.println("notify context--->" + jsonStr);
        System.out.println("data-->"+ data);
        System.out.println("progress-->"+ progress);
        System.out.println("message-->"+ message);
        System.out.println("status-->"+ status);

        //定时任务失败,发送消息
        if("finalFailed".equals(status)){
            JSONObject title = new JSONObject();
            title.put("title", "定时任务测试");
            title.put("message", message);

            JSONObject params = new JSONObject();
            params.put("templateCode", "TIMER_WARN_MESSAGE");
            params.put("senderId", "system");
            params.put("senderName", "system");
            params.put("params", title);

            ServiceUtil.post(SpringWebUtil.getRequest(), "message", "/main/message/sendmessage", params);
        }
        return "OK";
    }

上面的代码执行后输出如下

jobId-->CA2B296065700001687EA002191B2FA0
executeNumber-->1
notify context--->"{\"response\":{\"data\":{\"data\":\"OK\"},\"progress\":\"100%\",\"message\":\"同步调用request成功...\",\"status\":\"finalSucceed\"},\"httpStatus\":200}"
data-->{"data":"OK"}
progress-->100%
message-->同步调用request成功...
status-->finalSucceed

5 配置消息模板

代码中的TIMER_WARN_MESSAGE为消息模板编码,在消息中心的消息模板管理中配置,如下图所示

  • 标题和内容中可以使用变量,用${变量名}的方式引用,请求参数params里面需包含变量值
  • 可配置发送方式和接收者

6 配置通知请求模板

在定时任务上配置通知请求模板

选择接受通知服务,使用调度中心提供的两个环境变量设置两个参数

可以设置匹配策略,不同的状态调用不同的服务请求。本例没有设置匹配策略,是在代码中判断的

results matching ""

    No results matching ""

    results matching ""

      No results matching ""