通过XXL-JOB调度Dify工作流

更新时间:
复制 MD 格式

本文将介绍通过任务调度XXL-JOB调度Dify工作流的功能优势,并提供具体的接入步骤。

背景信息

Dify工作流具有广泛的业务应用场景,需要用到定时调度,例如:

  • 风险监控:每分钟扫描风险数据,通过大模型分析潜在风险事件,并及时发出报警。

  • 数据分析:每日拉取金融数据,通过大模型进行数据分析,为投资者提供决策建议。

  • 内容生成:每天自动总结工作内容,生成日报。

重要

Dify原生不支持定时调度功能,可以使用任务调度XXL-JOB作为工作流的调度和状态监控。

核心功能

通过XXL-JOB调度Dify工作流,有以下核心功能和优势:

  • Dify任务:支持调度自建的公网Dify工作流,以及阿里云自建的内网Dify工作流。

  • 灵活的定时配置:支持cronapifixed_ratefixed_delayone_time时间类型,自定义时区和日历。

  • 企业级报警监控。

    • 灵活的报警策略:任务级别失败报警、超时报警、成功通知。以及实例和应用级别的阈值报警。

    • 多渠道消息通知:短信、电话、Webhook、邮件。

  • 企业级可观测。

    • 调度大盘:可以查看实例和应用级别调度情况,包括调度、成功、失败曲线。

    • 执行历史:记录Dify工作流每次执行的历史记录,包括状态、基本信息、输入输出、耗时、Tokens消耗等。

    • 调度事件:记录Dify工作流每次调度的事件,包括工作流相关事件、节点相关事件。

    • 节点追踪:记录Dify工作流一次执行,所有节点的执行情况,支持循环、迭代、条件分支的下钻。

前提条件

接入步骤

1. (可选)Dify服务配置内网API服务器域名

  1. 登录容器服务管理控制台

  2. 在左侧导航栏的集群列表中,单击集群名称进入已部署Dify服务集群。

  3. 选择左侧导航栏的网络 > 服务,单击创建

  4. 服务类型选择负载均衡(LoadBalancer)访问方式选择私网访问。参考以下示例服务关联填入component组件选择proxy,填入其他配置项后,单击确定

    负载均衡类型选择网络型负载均衡 NLB,资源选择新建资源,名称填写ack-dify-apiserver,计费方式选择按量计费,IP版本选择IPv4

    外部流量策略选择Local端口映射配置名称为http-dify,服务端口为80,容器端口为dify,协议为TCP

  5. 创建完成后,将生成内网API服务器的地址。

    服务列表中,查看目标服务(如 dify-test)的外部IP地址(External IP)列,即可获取该地址(NLB 域名格式,如 nlb-xxx.cn-hang-xxx.lb.com)。

2. 创建Dify工作流任务

  1. 登录Dify控制台,单击右上角的工作室,选择从应用模板创建,创建一个工作流。

  2. 登录MSE XXL-JOB控制台,并在顶部菜单栏选择地域。

  3. 在左侧导航栏,选择任务调度 > XXL-JOB

  4. 单击进入目标实例,在左侧导航栏的任务管理,单击创建任务任务类型选择Dify工作流。更多创建任务信息,请参见任务管理

    1. Endpoint:Dify工作流的API服务器,登录Dify控制台,在访问 API页面右上角可获取API 服务器。如果使用阿里云自建Dify服务,推荐参考步骤一,将域名更改为内网地址。

    2. API KEY:Dify工作流的API 密钥,不同的工作流有不同的密钥。单击访问 API页面右上角API密钥获取。

    3. 输入:工作流的输入,对应Bodyinputs的值,格式为JSON。

      curl -X POST 'http://8.xxx.247/v1/workflows/run' \
      --header 'Authorization: Bearer {api_key}' \
      --header 'Content-Type: application/json' \
      --data-raw '{
          "inputs": {},
          "response_mode": "streaming",
          "user": "abc-123"
      }'

      inpus值示例如下:

      {"input_text": "what is your name"}

3. 测试验证

  1. 单击已创建任务操作列下的运行一次,手动测试。

  2. 单击目标任务操作 > 更多下的调度记录,查看任务执行记录。

    执行列表包含任务执行ID任务ID/名称所属应用开始时间/结束时间耗时Tokens状态列,可通过操作列的详情日志链接查看具体执行信息,并支持按任务执行ID搜索或按状态筛选记录。

  3. 单击执行任务操作列的详情,即可查看Dify工作流的基本信息输入输出和节点追踪

    • 基本信息。

      任务调度执行详情包括:任务执行ID(137294xxx)、调度类型(定时调度)、任务ID(3)、任务名称(迭代器测试)、重试次数(0)、路由策略(轮询)、数据时间(2025-05-16 14:25:00)、调度时间(2025-05-16 14:25:00)、开始时间(2025-05-16 14:25:00)、结束时间(2025-05-16 14:25:25)、耗时(25.568 s)、Tokens(2.403K tokens)、调度节点(10.3.1.2)、执行节点(--)。

    • 输入输出。

      调度详情弹窗的输入输出页签中,输入内容为 {"input_text": "what is your name"},输出内容为 {"final": "你叫什么名字呀?..."},验证调度任务已成功将英文文本翻译为自然流畅的中文表达。

    • 追踪,如果是迭代器、循环分支,支持节点下钻。

      展开迭代节点后可查看各子迭代的输入输出数据(如输入 "what is your name",输出 "你叫什么名字?"),并显示各步骤(Start、Code、Iteration、Template、End)的执行状态与耗时。

      下钻后可查看迭代内各子节点的执行状态(如 succeeded)、消耗的 token 数及执行耗时。

通过OpenAPI操作

MSE XXL-JOB控制台的所有接口均提供OpenAPI。如果您希望通过API动态创建任务、运行工作流,监听状态以及获取执行结果,请参考以下步骤:

  1. 创建任务:创建任务

  2. 运行任务:运行一次任务

    1. 在请求时,InstanceParameters参数可用于填充新的输入,以替换XXL-JOB控制台任务管理中的输入。

    2. 执行成功后返回JobExecutionId(任务执行ID)。

  3. 根据JobExecutionId(任务执行ID)查询状态和结果:获取任务执行的详细信息

    1. Result返回执行的结果。

    2. 返回参数Status=4,表示请求执行成功。