通过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

    外部流量策略选择Local。服务关联标签还包括app.kubernetes.io/instance=ack-difyapp.kubernetes.io/name=ack-dify。端口映射中,名称填写http-dify,服务端口为80,容器端口为dify,协议选择TCP

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

    在容器服务控制台服务列表页面,查看目标服务对应的外部IP地址(External IP)列,即可获取该地址(NLB 域名)。

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状态等信息。

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

    • 基本信息。

      本次定时调度任务(迭代器测试)的执行详情:任务ID 为 3,调度类型为定时调度,路由策略为轮询,数据时间调度时间均为 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。

    • 输入输出。

      调度详情弹窗中,输入区域的 JSON 内容为 {"input_text": "what is your name"}输出区域的 JSON 内容为 {"final": "你叫什么名字呀?"},表明调度任务已将英文输入成功翻译为中文输出。

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

      展开Iteration迭代节点后,可查看每个迭代项的输入和输出详情,例如输入为 {"iterator_selector": ["what is your name"]},输出为 {"output": ["你叫什么名字?"]},各节点均显示执行状态(succeeded)及耗时。

      下钻后可查看迭代内部各子节点的执行详情,本示例中包含 Identify Terms1st TranslationProblems2nd Translation 四个LLM节点,均执行成功,并显示各节点的token消耗与耗时。

通过OpenAPI操作

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

  1. 创建任务:创建任务

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

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

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

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

    1. Result返回执行的结果。

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