news 2026/9/15 18:47:48

Apache DolphinScheduler HTTP 任务节点实战:请求配置、响应校验与输出参数全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Apache DolphinScheduler HTTP 任务节点实战:请求配置、响应校验与输出参数全解析

Apache DolphinScheduler HTTP 任务节点实战:请求配置、响应校验与输出参数全解析

【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler

HTTP 任务节点是 Apache DolphinScheduler 中用于执行 HTTP 类型任务的内置节点,它支持 GET、POST、PUT、DELETE 四种请求方法,并内置"响应校验"能力,让工作流中的接口调用既能发请求、也能验证返回结果。本文以 HTTP 任务官方文档 为主体,结合仓库中dolphinscheduler-task-http插件的源码实现,完整讲解该节点的参数配置、输出参数用法、校验逻辑的底层原理与可落地的任务样例,帮助你快速在 DAG 中接入接口调用类任务。

HTTP 任务节点综述

该节点用于执行 HTTP 类型的任务,除了发起请求之外,还支持对 HTTP 响应做校验(如默认响应码、自定义响应码、内容包含、内容不包含),因此既可以承担"调用外部 API"的职责,也可以作为工作流中的接口健康检查、数据提交、系统联动等环节。

从源码结构看,HTTP 任务是一个标准的 DolphinScheduler 任务插件,其核心实现位于 dolphinscheduler-task-http 插件目录 下,主要包含:

  • HttpTask.java:任务执行主逻辑,负责发请求与校验响应;
  • HttpParameters.java:参数模型,对应任务表单中的各配置项;
  • HttpCheckCondition.java:校验条件枚举;
  • HttpRequestMethod.java:请求方法枚举(GET/POST/PUT/DELETE)。

创建 HTTP 任务

在 DolphinScheduler 的 Web UI 中创建 HTTP 任务的步骤如下:

  1. 点击项目管理 -> 项目名称 -> 工作流定义,点击"创建工作流"按钮,进入 DAG 编辑页面;
  2. 从工具栏拖动HTTP 任务节点到画板中;
  3. 双击节点,在弹出的任务配置面板中填写请求地址、请求类型、请求参数、校验条件等参数;
  4. 配置完成后,将该节点与上游/下游任务连线,保存并发布工作流。

任务参数详解

HTTP 任务节点的参数分为两类:一类是所有任务共有的默认参数,一类是 HTTP 特有的任务参数。

默认任务参数

任务名称、运行标志、缓存执行、描述、任务优先级、Worker 分组、任务组名称、组内优先级、环境名称、失败重试次数、失败重试间隔、CPU 配额、最大内存、超时告警、资源、前置任务、延时执行时间等通用配置,请参考 DolphinScheduler 任务参数附录 的"默认任务参数"一栏,此处不再赘述。

HTTP 特有任务参数

任务参数描述
请求地址http 请求 URL
请求类型支持 GET、POST、PUT、DELETE
请求参数支持 Parameter、Body、Headers 三种类型
校验条件支持默认响应码、自定义响应码、内容包含、内容不包含
校验内容当校验条件选择自定义响应码、内容包含、内容不包含时,需填写校验内容
自定义参数是 http 局部的用户自定义参数,会替换脚本中以${变量}的内容

从源码角度进一步解读这些参数:在 HttpParameters.java 中,url对应请求地址;httpMethod对应请求类型(枚举值见 HttpRequestMethod.java,仅支持 GET、POST、PUT、DELETE);httpParams对应请求参数列表,列表中的每一项通过httpParametersType区分为 Parameter 或 Headers 两种类型(见 HttpParametersType.java),Body 则单独存放于httpBody字段;httpCheckConditioncondition对应校验条件与校验内容。

需要注意,HttpParameters.checkParameters() 的合法性校验要求:URL 非空、请求方法非空且连接超时时间connectTimeout大于 0,否则任务初始化阶段会直接抛出"http task params is not valid"异常。

任务输出参数:response

HTTP 任务会将其请求返回结果作为输出参数暴露给下游任务使用:

任务参数描述
responseVARCHAR,HTTP 请求返回结果

下游任务可以使用${taskName.response}引用该输出参数。例如,当前 task1 为 HTTP 任务,下游任务可以使用${task1.response}引用 task1 的输出参数。

输出参数的生成逻辑在 HttpTask.addDefaultOutput() 中:任务将响应体封装为一个名为{taskName}.responseProperty,类型为VARCHAR、方向为OUT,并写入参数池(var pool)。也就是说,只要上游 HTTP 任务执行成功,下游任务无论是什么类型,都可以通过${task1.response}拿到该任务的完整响应内容,典型的应用场景包括:由 HTTP 任务获取接口返回值,再交给后续的 Shell、Python 或 SQL 任务做进一步处理。

任务样例:使用 POST 向登录页面提交数据

HTTP 定义了与服务器交互的不同方法,最基本的方法有 4 种:GET、POST、PUT、DELETE。这里我们使用 HTTP 任务节点,演示使用 POST 向系统的登录页面发送请求、提交数据。

主要配置参数如下(以下参数均可通过内置参数替换,例如使用${task1.response}${today}等):

  • URL:访问目标资源的地址,这里为系统的登录页面;
  • 请求类型:GET、POST、PUT、DELETE;
  • Headers:请求头信息。当前仅支持application/jsonapplication/x-www-form-urlencoded两种格式,如果输入其他格式,默认会使用application/json格式。从源码看,HttpTask.getContentType() 会从 Headers 列表中查找Content-Type(定义于 HttpConstants.java),若未找到或值不合法,则回退为application/json;而 Headers 中的Content-Type项会被 getHeaders() 过滤掉,不参与普通请求头的拼装;
  • HTTP Parameters:GET、DELETE 请求参数;
  • HTTP Body:POST、PUT 请求参数;
  • 校验条件:默认响应码 200、自定义响应码、内容包含、内容不包含;
  • 校验内容:当校验条件为自定义响应码、内容包含、内容不包含时,需填写校验内容,校验内容为模糊匹配。

关于 HTTP Body 的格式,HttpTask.getRequestBody() 会将 Body 先解析为 JSON 节点,要求必须是合法的 JSON 对象,否则抛出Http request body should be a json object异常。因此填写 Body 时应使用形如{"username":"admin","password":"******"}的 JSON 格式。

校验条件的底层实现:四种模式如何判定任务成败

校验条件是 HTTP 任务区别于普通"发个请求"的关键能力。四种校验模式的枚举定义在 HttpCheckCondition.java 中,而判定逻辑实现在 HttpTask.validateResponse(),具体规则如下:

  • STATUS_CODE_DEFAULT(默认响应码):要求响应状态码为 200(即 HttpConstants.RESPONSE_CODE_SUCCESS),这也是校验条件未显式配置时的默认值;
  • STATUS_CODE_CUSTOM(自定义响应码):要求实际状态码与"校验内容"中填写的数字完全相等(Integer.parseInt(condition)),仅支持单个整数;
  • BODY_CONTAINS(内容包含):响应体非空,且必须包含"校验内容"中填写的子串(模糊匹配);
  • BODY_NOT_CONTAINS(内容不包含):响应体非空,且不能包含"校验内容"中填写的子串。

任何一条规则不满足,任务都会以失败状态结束(EXIT_CODE_FAILURE),并输出包含 URL、状态码、校验条件与响应体的错误日志;全部满足则记录成功日志并以成功状态结束。仓库中的测试用例 HttpTaskTest.java 使用 MockWebServer 分别对四种 HTTP 方法、成功与失败的校验路径进行了覆盖验证,可作为理解各校验分支行为的参考。

HTTP 请求的底层执行原理

HTTP 任务的请求由 HttpTask.sendRequest() 根据请求类型分发到对应的发送方法:GET 走sendGetRequest()、POST 走sendPostRequest()、PUT 走sendPutRequest()、DELETE 走sendDeleteRequest(),底层统一通过 DolphinScheduler 公共模块封装的 OkHttp 工具(OkHttpUtils)发起请求。

几个值得注意的实现细节:

  • GET/DELETE 与 POST/PUT 的参数位置不同:GET、DELETE 请求的参数以 Parameter 形式拼接进 URL(见getRequestParams()),而 POST、PUT 的参数以 Body 形式携带(见getRequestBody());
  • 超时时间connectTimeout参数(单位毫秒)同时作用于连接、读取等环节,且在参数校验时要求必须大于 0;
  • 参数占位符替换:无论是 Headers、Parameter 还是 Body 中的值,都会经过ParameterUtils.convertParameterPlaceholders()${变量}占位符替换(见 HttpTask.java),因此 URL、请求头、参数值、Body 中都可以引用工作流级/任务级的自定义参数或内置参数,实现"一套模板、动态取值"。

小结

HTTP 任务节点让"调用接口"成为 DolphinScheduler 工作流中的一等公民:通过四种请求方法覆盖常见的 RESTful 调用场景,通过四种校验条件把"接口是否正常"固化为任务成败的判定标准,通过${taskName.response}输出参数实现跨任务的数据传递,再配合内置参数与自定义参数的占位符替换,足以胜任接口触发、健康检查、系统联动等绝大多数 HTTP 集成需求。若需进一步了解该任务的源码与测试细节,可深入阅读 dolphinscheduler-task-http 插件 目录,或参考 HTTP 任务官方文档 与 任务参数附录。

【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 18:47:46

gs-quant Portfolio 指南:用 Python 构建、定价与风险管理投资组合

gs-quant Portfolio 指南:用 Python 构建、定价与风险管理投资组合 【免费下载链接】gs-quant Python toolkit for quantitative finance 项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant gs-quant 的 Portfolio 类是量化交易中处理一篮子工具的…

作者头像 李华
网站建设 2026/9/15 18:46:39

分布式系统服务根目录安全防护体系设计与实践

1. 服务根目录的安全防护体系设计在分布式系统架构中,服务根目录作为核心入口节点,其安全性直接关系到整个系统的稳定运行。我曾在某大型电商平台的微服务架构改造项目中,亲历过因根目录配置不当导致的全局性服务雪崩。那次事故让我们团队深刻…

作者头像 李华