
工作流自动化任务调度后端【免费下载链接】conductorConductor is a microservices orchestration engine.项目地址https://gitcode.com/gh_mirrors/condu/conductor点击查看免费下载工作流启动Starting Workflows是使用 Conductor 编排引擎时最高频的基础操作它通过一次 HTTP 调用创建一个工作流实例Workflow Execution并注入业务输入参数随后引擎会按照工作流定义自动调度其中的任务。本篇指南以 Conductor 官方文档中启动工作流的 API 为核心结合当前仓库中 REST 控制层、服务层 与 Java 客户端 的源码实现完整讲解POST /api/workflow/{name}的调用方式、请求参数、返回值与底层行为并给出 curl、Node fetch 以及官方客户端 SDK 的可运行示例。核心 APIPOST /api/workflow/{name}Conductor 提供了最直接的 REST 接口用于启动工作流POST /api/workflow/{name}其中{name}是工作流名称Workflow Name的占位符。请求体Body为工作流输入参数Workflow Input Parameters格式为 JSON 对象如果工作流不需要任何输入请求体可以为空。调用成功后接口返回该工作流实例的唯一 IDworkflowId后续查询执行状态、暂停、恢复、重试等操作都以该 ID 为标识。该端点在仓库中的实现位于 WorkflowResource.javaPostMapping(value /{name}, produces TEXT_PLAIN_VALUE) Operation(summary Start a new workflow. Returns the ID of the workflow instance that can be later used for tracking) public String startWorkflow( PathVariable(name) String name, RequestParam(value version, required false) Integer version, RequestParam(value correlationId, required false) String correlationId, RequestParam(value priority, defaultValue 0, required false) int priority, RequestBody MapString, Object input) { return workflowService.startWorkflow(name, version, correlationId, priority, input); }控制器类上标注了RequestMapping(WORKFLOW)而WORKFLOW常量在 RequestMappingConstants.java 中定义为API_PREFIX workflow即/api/workflow因此完整路径为POST /api/workflow/{name}。支持的可选参数除路径中的工作流名称外该接口还支持以下 Query 参数均可选参数类型默认值说明versionInteger最新版本指定要启动的工作流定义版本不传时默认使用最新版本correlationIdString无关联 ID可用于将多个工作流实例与业务语义关联如订单号之后可通过GET /api/workflow/{name}/correlated/{correlationId}检索priorityint0工作流优先级用于任务调度时的优先级排队带版本的启动方式POST /api/workflow/{name}?version2如果同一工作流存在多个版本可以通过version参数指定具体启动哪个版本curl -X POST https://localhost:8080/api/workflow/sample_workflow?version2 \ -H accept: text/plain \ -H content-type: application/json \ --data-raw {service:fedex}从服务层实现 WorkflowServiceImpl.java 可以看到当传入name与version时引擎会先通过metadataService.getWorkflowDef(name, version)从元数据存储中解析出对应版本的工作流定义若找不到定义会抛出NotFoundException错误信息形如No such workflow found by name: ..., version: ...随后将名称、版本、关联 ID、优先级与输入组装成StartWorkflowInput交给startWorkflowOperation执行。使用 curl 启动工作流文档提供了最直接的 curl 示例可用于快速验证引擎是否正常、或编写 Shell/Python 等语言的简单调用脚本curl https://localhost:8080/api/workflow/sample_workflow \ -H accept: text/plain \ -H content-type: application/json \ --data-raw {service:fedex}该示例中工作流名称为sample_workflow请求头content-type: application/json声明请求体为 JSON请求头accept: text/plain表示接受纯文本响应返回的工作流实例 ID请求体{service:fedex}为工作流的唯一输入参数service其值为fedex工作流定义中的任务可以在运行时通过workflow.input.service读取该值。空输入的启动方式如果工作流无需输入参数可以发送空 JSON 对象curl -X POST https://localhost:8080/api/workflow/sample_workflow \ -H accept: text/plain \ -H content-type: application/json \ --data-raw {}将返回的 workflowId 用于后续追踪接口返回的是text/plain格式的工作流实例 ID拿到后可通过以下端点持续追踪执行状态# 查询执行状态含任务详情 curl https://localhost:8080/api/workflow/{workflowId}?includeTaskstrue # 查询所有正在运行的实例 curl https://localhost:8080/api/workflow/running/sample_workflow其中GET /api/workflow/{workflowId}与GET /api/workflow/running/{name}均由同一个 WorkflowResource.java 提供前者对应控制层中的getExecutionStatus后者对应getRunningWorkflow。仓库自带的启动调用示例在 KitchenSinkInitializer.java 中服务启动初始化示例也使用完全相同的端点启动工作流restTemplate.postForEntity( url(/api/workflow/kitchensink), Collections.singletonMap(task2Name, task_5), String.class);这验证了POST /api/workflow/{name}的正确用法路径为工作流名称请求体为输入参数 Map响应类型为String工作流实例 ID。此外该初始化器还展示了带完整启动请求StartWorkflowRequest的调用方式POST /api/workflow/不带{name}路径例如request new HttpEntity(readToString(ephemeralWorkflowWithStoredTasks), headers); restTemplate.postForEntity(url(/api/workflow/), request, String.class);使用 Node fetch 启动工作流在 Node.js 环境中可以使用原生fetch发起同样的请求。文档给出了如下示例fetch(https://localhost:8080/api/workflow/sample_workflow, { headers: { accept: text/plain, content-type: application/json, }, body: {\service\:\fedex\}, method: POST, });其中body是字符串形式的 JSON等价于 curl 示例中的--data-raw {service:fedex}。注意该示例未显式指定method: POST之外的细节生产环境中建议将响应转为文本并处理返回的workflowIdconst response await fetch(https://localhost:8080/api/workflow/sample_workflow, { method: POST, headers: { accept: text/plain, content-type: application/json, }, body: JSON.stringify({ service: fedex }), }); const workflowId await response.text(); console.log(Workflow started with id:, workflowId);fetch返回值即可直接用于后续查询与追踪。使用官方客户端 SDK 启动工作流Conductor 为多种主流语言提供了官方客户端 SDKSDK 内部封装了对上述 REST API 的调用开发者无需直接拼 URL 与请求头。文档明确指出请参考所选语言的 SDK 文档来配置客户端以调用工作流执行。仓库中对应的语言 SDK 文档位于Java SDKGo SDKPython SDKC# SDKClojure SDKJava SDK 示例仓库中的 Java 客户端实现位于 WorkflowClient.java核心调用方法为startWorkflow(StartWorkflowRequest)WorkflowClient workflowClient new WorkflowClient(); // 默认配置可注入 ClientConfig StartWorkflowRequest request new StartWorkflowRequest(); request.setName(sample_workflow); request.setVersion(1); request.setCorrelationId(order-12345); request.setPriority(0); MapString, Object input new HashMap(); input.put(service, fedex); request.setInput(input); String workflowId workflowClient.startWorkflow(request);从客户端源码 WorkflowClient.java 可以看到startWorkflow内部做了多项校验与增强这些是直接调用 REST API 时不容易注意到的细节非空校验startWorkflowRequest不能为nullname不能为空字符串Validate.notNull/Validate.notBlank否则直接抛出异常版本默认值请求中未显式设置version时客户端使用字符串latest记录指标大输入自动外置存储客户端会将输入序列化为字节数组并测量大小若超过workflowInputPayloadThresholdKB阈值且配置了外部负载存储ExternalPayloadStorage且未超过workflowInputMaxPayloadThresholdKB上限则自动将输入上传到外部存储并把路径写入externalInputPayloadStoragePath若未启用外部存储或超过上限则抛出ConductorClientException。相关阈值配置位于ConductorClientConfiguration默认实现DefaultConductorClientConfiguration最终请求通过postForEntity(workflow, startWorkflowRequest, null, String.class, name)调用即对应POST /api/workflow/{name}端点。底层调用链无论是 REST API、curl、Node fetch 还是客户端 SDK最终都汇入同一条服务端调用链控制层WorkflowResource.startWorkflow 接收 HTTP 请求并解析路径/Query/请求体参数服务层WorkflowServiceImpl.startWorkflow 通过metadataService.getWorkflowDef(name, version)解析工作流定义缺失时抛出NotFoundException然后构造StartWorkflowInput执行层startWorkflowOperation.execute(startWorkflowInput)完成实例创建、输入注入与初始任务调度最终返回工作流实例 ID。常见错误与排查现象原因处理方式返回 404 /No such workflow found by name指定的工作流定义不存在或version指向了不存在的版本先通过GET /api/metadata/workflow/{name}确认定义与可用版本返回 400请求体不是合法 JSON或工作流输入校验失败检查请求体格式与工作流定义中的输入要求客户端抛出ConductorClientException输入负载超过阈值且未启用外部负载存储调大阈值或启用外部负载存储配置参见 externalpayloadstorage 文档启动成功但任务不执行工作流输入不满足任务输入表达式或 Worker 未注册检查工作流执行页面中任务状态与失败原因参见 debugging-workflows小结启动工作流是 Conductor 编排体系的第一步POST /api/workflow/{name}以工作流名称为路径、JSON 对象为输入、text/plain返回实例 ID配合version、correlationId、priority三个可选 Query 参数即可完成绝大多数场景的实例创建。无论使用 curl、Node fetch 还是官方客户端 SDK请求最终都会进入 WorkflowServiceImpl 的startWorkflowOperation执行链若输入体量较大Java 客户端会自动借助外部负载存储ExternalPayloadStorage进行分流。拿到返回的workflowId后即可通过GET /api/workflow/{workflowId}持续追踪工作流的执行状态。赞分享工作流自动化任务调度后端【免费下载链接】conductorConductor is a microservices orchestration engine.项目地址https://gitcode.com/gh_mirrors/condu/conductor点击查看免费下载相关推荐Conductor 工作流启动全指南CLI、REST API 与多语言 SDK 实践Conductor 工作流启动全指南CLI、REST API 与多语言 SDK 实践 导读 启动工作流Start Workflow是 Conductor后端流程编排工作流自动化微服务Conductor 工作流启动实战指南从 /workflow REST 端点到动态工作流Conductor 工作流启动实战指南从 /workflow REST 端点到动态工作流 启动Start是 Conductor 工作流生命周期的第一步也工作流自动化任务调度后端使用官方 C SDK 构建 Conductor 工作流客户端与 Worker安装、配置与实战使用官方 C SDK 构建 Conductor 工作流客户端与 Worker安装、配置与实战 Conductor 是一个事件驱动、具备持久化与高弹性执行能力的后端流程编排工作流自动化微服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考