任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载导读本文围绕 Apache DolphinScheduler 告警体系中的HTTP 告警插件系统讲解如何通过创建告警实例、选择Http插件将工作流产生的告警信息以GET或POST请求的方式推送到任意自建 HTTP 服务如内部监控平台、自定义 Webhook。文中不仅完整覆盖 URL、请求类型、Headers、Body、内容字段等全部配置项还结合本仓库dolphinscheduler-alert-http模块的源码与测试深入剖析告警请求的构造逻辑、超时控制与失败重试机制帮助读者既会配置、又懂原理。一、HTTP 告警插件是什么HTTP 告警插件是 Apache DolphinScheduler 内置的告警通道之一。当工作流实例或任务实例触发告警时告警服务会将告警内容封装后通过 HTTP 协议发送到你指定的接口地址。这意味着只要你的团队拥有任意一个可接收 HTTP 请求的服务就能无缝接入 DolphinScheduler 的告警通知无需额外依赖钉钉、企业微信等第三方平台。使用方式非常直接在告警实例管理中新建一个告警实例在插件类型下拉框中选择Http即可参见官方文档 docs/docs/en/guide/alert/http.md。该插件对应的源码模块位于 dolphinscheduler-alert-http通过AutoService(AlertChannelFactory.class)注解注册为标准的告警插件见 HttpAlertChannelFactory.java插件注册名为Http。二、参数配置说明创建Http告警实例时需要填写以下参数。官方文档给出的参数表如下表中对每个字段的作用做了明确说明参数说明URLHTTP 请求地址需包含协议、主机、路径若请求方式为GET还可在此带上查询参数Request Type选择请求类型可选POST或GETHeadersHTTP 请求头以 JSON 格式填写Body请求体以 JSON 格式填写在使用POST方式发送告警时生效Content Field承载告警信息的字段名2.1 参数定义与校验源码佐证在 HttpAlertChannelFactory.java 中插件通过 SPI 参数体系逐一定义了上述字段并指定了校验规则urlInputParam必填setRequired(true)placeholder 提示为 input request urlrequestTypeInputParam必填placeholder 提示 input request type POST or GETheaderParamsInputParam必填placeholder 提示 input request headersbodyParamsInputParam非必填placeholder 提示 input request body as JSON formatcontentFieldInputParam必填placeholder 提示 input alert msg field nametimeoutInputNumberParam非必填类型为数字默认值为 120秒。文档补充要点官方文档的参数表中没有列出timeout但在源码中它同样是插件参数之一。默认值定义在 HttpAlertConstants.javaDEFAULT_TIMEOUT 120它控制连接建立与数据读写的超时时间建议在对接慢接口时按需调大。HttpAlertChannelFactoryTest中的getParamsTest断言插件参数总数为6 个HttpAlertChannelFactoryTest.java与上述定义一一对应也印证了timeout确实是该插件的正式参数之一。三、发送方式Send Type插件通过Request Type字段选择POST或GET两种方式之一发送 HTTP 请求。两种方式发送告警信息的载体不同GET 将告警内容拼接到 URL 查询参数中POST 将告警内容放入请求体。3.1 GET 方式GET 方式通过 HTTP GET 请求发送告警信息。配置示例如下示例图片来自 docs/img/alert/http-get-example.pngGET 方式的典型配置如下URLhttps://alert.example.com/api/notify需包含协议、主机、路径Request TypeGETHeaders{Content-Type:application/json}Content FieldcontentBodyGET 方式下无需填写该字段对 GET 不生效发送时插件会将告警信息写入contentField指定的字段并追加到 URL 末尾。从源码 HttpSender.java 可以看到具体拼接逻辑private void setMsgInUrl(String msg) { if (StringUtils.isNotBlank(contentField)) { String type ; // check splice char is or ? if (!url.contains(URL_SPLICE_CHAR)) { type URL_SPLICE_CHAR; } try { url String.format(%s%s%s%s, url, type, contentField, URLEncoder.encode(msg, StandardCharsets.UTF_8.name())); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } } }关键细节分隔符自适应插件会检测 URL 中是否已包含?。若 URL 本身已带查询参数如...?level1则用拼接否则自动补?例如最终请求 URL 形如https://alert.example.com/api/notify?content告警内容告警内容会被 URL 编码URLEncoder.encode(msg, StandardCharsets.UTF_8.name())确保中文、空格、特殊符号等不会破坏 URL 结构接收方需按 URL 解码还原原文请求头同样生效GET 请求也会调用setHeader()设置 Headers 参数见 HttpSender.java即Content-Type、Authorization等请求头在 GET 方式下同样会被携带。3.2 POST 方式POST 方式将告警信息放入 HTTP 请求体中发送。配置示例如下示例图片来自 docs/img/alert/http-post-example.pngPOST 方式的典型配置如下URLhttps://alert.example.com/api/notifyRequest TypePOSTHeaders{Content-Type:application/json}Body{number:123456}可选作为请求体中的固定字段Content Fieldcontent发送时插件先把Body中的 JSON 解析出来再将contentField指定的字段以告警内容为值写入其中最终以 UTF-8 编码的 JSON 字符串作为请求体。核心逻辑在 HttpSender.javaprivate void setMsgInRequestBody(String msg) { try { ObjectNode objectNode JSONUtils.createObjectNode(); if (StringUtils.isNotBlank(bodyParams)) { objectNode JSONUtils.parseObject(bodyParams); } // set msg content field objectNode.put(contentField, msg); StringEntity entity new StringEntity(JSONUtils.toJsonString(objectNode), StandardCharsets.UTF_8); ((HttpPost) httpRequest).setEntity(entity); } catch (Exception e) { log.error(send http alert msg exception : {}, e.getMessage()); } }关键细节Body 可留空bodyParams非必填。若填写则先解析为 JSON 对象再叠加告警内容字段若留空则请求体只包含contentField一个字段固定字段 动态内容组合Body 中可以预置业务标识如number、type、channel等固定字段告警信息则动态写入contentField接收方按统一 JSON 结构解析即可UTF-8 编码请求体以StandardCharsets.UTF_8构造StringEntity避免中文乱码。四、源码级工作流程4.1 调用链AlertChannel → HttpSenderHTTP 告警插件的入口是HttpAlertChannel它实现了告警 API 的AlertChannel接口。核心流程如下见 HttpAlertChannel.javaOverride public AlertResult process(AlertInfo alertInfo) { AlertData alertData alertInfo.getAlertData(); MapString, String paramsMap alertInfo.getAlertParams(); if (null paramsMap) { return new AlertResult(false, http params is null); } return new HttpSender(paramsMap).send(alertData.getContent()); }告警服务把告警数据AlertData其中getContent()即告警正文与用户在告警实例中填写的插件参数AlertParams一起交给HttpAlertChannel若参数为空直接返回失败结果http params is null否则构造HttpSender以参数映射键为url、headerParams、bodyParams、contentField、requestType、timeout定义见 HttpAlertConstants.java初始化并调用send()发送。4.2 请求构造与响应读取HttpSender.send()HttpSender.java的执行顺序根据requestType构造请求对象POST走HttpPost分支并写入 BodyGET走HttpGet分支并拼接 URL两者都会设置请求头若requestType既不是POST也不是GET例如拼写错误返回失败结果Request types are not supported执行请求并读取响应体UTF-8 解码成功则把响应字符串写入AlertResult.message返回失败则捕获异常并返回带错误信息的失败结果。4.3 超时与重试策略发送请求时插件基于 Apache HttpClient 构建客户端超时配置与重试策略如下见 HttpSender.javaRequestConfig requestConfig RequestConfig.custom() .setConnectTimeout(timeout * 1000) .setConnectionRequestTimeout(timeout * 1000) .setSocketTimeout(timeout * 1000) .build(); CloseableHttpClient httpClient HttpClients.custom() .setDefaultRequestConfig(requestConfig) .setRetryHandler(HttpServiceRetryStrategy.retryStrategy).build();三个超时统一生效连接建立超时、从连接池获取连接超时、Socket 读写超时均为timeout秒× 1000毫秒。默认 120 秒若告警接收端响应较慢可通过插件参数调整失败自动重试重试处理器为HttpServiceRetryStrategy定义在告警 API 模块 HttpServiceRetryStrategy.java 中规则如下最多重试3 次RETRY_COUNT 3每次重试前休眠2 秒RETRY_INTERVAL_TIME 2000L对SSLException不重试SSL 握手失败重试无意义对UnknownHostException、InterruptedIOException、NoHttpResponseException、SocketException等瞬时性异常会先休眠 2 秒再重试对于非幂等请求HttpEntityEnclosingRequest即带请求体的 POST默认不重试避免重复提交产生副作用。这些规则意味着GET 类告警无请求体具备较强的容错能力而 POST 告警仅在上述特定瞬时异常下重试在设计接收端接口时应尽量保证其幂等性。五、测试用例对配置的验证仓库为 HTTP 告警插件提供了完整的单元测试可作为配置正确性的直接参考HttpSenderTest.java 验证了 GET 方式URL 为https://www.dolphinscheduler-not-exists-web.com:12345Headers 为{Content-Type:application/json}Body 为{number:123456}contentField为content并断言最终请求 URL 同时包含原始 URL 与contentField即告警内容被正确拼入 URLHttpAlertChannelTest.java 给出了 POST 方式的标准参数组合Headers 为{Content-Type:application/json}Body 为{number:1234567}contentField为contentrequestType为POSTtimeout为 120HttpAlertChannelTest.java 还覆盖了参数为空的边界场景确认此时返回http params is null的失败结果。这些测试表明Content-Type: application/json的 Headers、content字段名与POST/GET请求类型组合是该插件最典型的用法。六、配置建议与注意事项URL 必须完整URL 需包含协议http://或https://、主机与路径。GET 方式若需额外业务参数可直接写在 URL 查询串中插件会自动用衔接contentFieldHeaders 为必填项尽管有些接收端不校验请求头但插件将headerParams设为必填建议至少填写{Content-Type:application/json}与请求体格式保持一致Content Field 统一规划contentField同时作用于 GETURL 参数名与 POSTJSON 字段名接收端应据此解析告警正文建议在团队内约定统一的字段名如content或messageBody 固定字段辅助路由POST 场景可在 Body 中预置project、alertType等固定字段便于接收端按业务分类处理接收端需要响应插件以收到 HTTP 响应为成功标志若接收端长时间不响应或直接断连将触发超时与重试请确保接收服务的高可用与幂等安全性URL、Headers 与 Body 中若包含令牌等敏感信息请注意告警实例的访问权限管理。完成告警实例配置后在告警组中关联该实例并在工作流定义中设置相应的告警触发规则即可在工作流失败、超时等场景下收到 HTTP 推送的告警通知。赞分享任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载相关推荐Apache DolphinScheduler Email 邮件告警插件配置与实现原理指南Apache DolphinScheduler Email 邮件告警插件配置与实现原理指南 本指南以 email.md https://link.gitcode任务调度大数据后端前端Apache DolphinScheduler Email 邮件告警插件告警实例配置与源码实现详解Apache DolphinScheduler Email 邮件告警插件告警实例配置与源码实现详解 在 Apache DolphinScheduler数据编任务调度数据编排工作流自动化后端大数据Apache DolphinScheduler 钉钉DingTalk告警插件配置指南参数详解与源码实现原理Apache DolphinScheduler 钉钉DingTalk告警插件配置指南参数详解与源码实现原理 DolphinScheduler 内置了基于钉任务调度数据编排工作流自动化后端大数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考