本文主要介绍了服务集成的相关内容,包括集成模式、上下文对象和已集成云服务。

Serverless 工作流支持与多个云服务集成,即将其他服务作为任务步骤的执行单元。服务集成方式由 FDL 语言表达,在任务步骤中,您可以使用 resourceArn 来定义集成的目标服务,使用 pattern 定义集成模式。可使用的云服务列表可参见已集成云服务

集成模式

目前 Serverless 工作流支持三种不同的集成模式:

  • 请求响应模式:调用第三方服务,在 Serverless 工作流获得 HTTP 响应后进入下一个步骤。默认模式是请求响应模式。
  • 同步模式:通常这类服务提供了异步执行接口,Serverless 工作流调用异步接口成功后会等待,直到相关任务完成并获得了执行结果,Serverless 工作流才会继续执行下一个步骤。
  • 等待回调模式:调用第三方服务并传入任务令牌,Serverless 工作流将进入等待,直到您手动使用该令牌通知流程执行结果后才会继续执行下一个步骤。
  • 请求响应模式

    在 FDL 步骤中使用 resourceArn 描述目标服务,使用 pattern: requestResponse (可选,如无该参数则为默认模式。)描述服务集成模式。该模式下,Serverless 工作流将在调用接口返回后立刻进入到下一步骤的执行。以子流程功能(Serverless 工作流作为被集成服务)为例:

    version: v1
    type: flow
    steps:
      - type: task
        name: testSubflow
        resourceArn: acs:fnf:::flow/flowABC #描述子流程。
        pattern: requestResponse #描述服务集成模式:默认(请求响应)模式。
      - type: pass
        name: dummy       

    该示例展示了当 testSubflow 步骤执行时会触发一个 flowABC 流程。触发成功后,将进入下一步骤 dummyflowABC 流程可能仍然正在执行。

  • 同步模式

    对于某些集成服务,Serverless 工作流可以等到该服务的任务运行完成后再进入下一个步骤。一般这类服务为执行某个任务提供了任务启动(异步)的接口,需要提交任务并等待任务执行完成再进行下一步骤。

    在 FDL 步骤中使用 resourceArn 描述目标服务,使用 pattern: sync 描述服务集成模式。以子流程功能(Serverless 工作流作为被集成服务)为例:

    version: v1
    type: flow
    steps:
      - type: task
        name: testTask
        resourceArn: acs:fnf:::flow/flowABC #描述子流程。
        pattern: sync #描述服务集成模式:同步。
      - type: pass
        name: dummy          

    该示例展示了当该步骤执行时会触发一个 Serverless 工作流流程。触发成功后将等待该流程的执行结果,执行完成后将进入下一步骤;当 testSubflow 步骤执行时会触发一个flowABC 流程。触发成功后,将等待该流程的执行结果,执行完成后才进入下一步骤 dummyflowABC 流程已经执行完成。

  • 等待回调模式

    回调任务将使当前流程在任务调度点暂停,直到收到任务令牌的回调指令。在 FDL 步骤中使用 resourceArn 描述目标服务,使用 pattern: waitForCallback 描述服务集成模式。以子流程功能(Serverless 工作流作为被集成服务)为例:

    version: v1
    type: flow
    steps:
      - type: task
        name: testSubflow
        resourceArn: acs:fnf:::flow/flowABC #描述子流程
        pattern: waitForCallback #描述服务集成模式:等待回调
      - type: pass
        name: dummy            

    该示例展示了当 testSubflow 步骤执行时会触发一个 flowABC 流程。触发成功后,将暂停流程执行,等待回调(通过 ReportTaskSucceed 或者 ReportTaskFailed API)。在收到回调请求并处理完成后,流程将进入下一步骤 dummyflowABC 流程可能已经执行完成,也可能还在执行。其中回调是由用户发起。

上下文对象

上下文对象是流程执行实例的内部 JSON 对象,其中包含了关于执行、步骤的相关信息。该对象提供外部访问方式,在 inputMappings 中您可将 context 对象映射到具体变量中来实现访问。目前开放的 context 对象结构如下所示。

"context": {
    "flow": {
      // 本流程的唯一标识符 id 和流程名称、字符串类型。
        "id": "val1",
        "name "val2",
    },
    "execution": {
         // 本执行的名称。
        "name": "val3"
    },
    "step": {
        // 本步骤的名称。
        "name": "val4"
      // 本步骤的事件 ID。
        "eventID": "val5"
      // 当前循环的次数,在循环步骤(foreach)下可以使用。
        "IterationIndex": "val6",
    },
    "task": {
      // 本步骤的标识符,为一个字符串,在回调模式(waitForCallback)下可以使用。
        "token": "val7",
    },
}       

使用方式

例如集成 Serverless 工作流自身服务,需要在子流程中获取调用该子流程的父流程相关信息,并获取调用步骤的 taskToken 用于回调,您可以通过以下方式获取这两个字段。

    ...
        inputMappings:
      - target: current_flow_name 
        source: $context.flow.name 
      - target: current_execution_name 
        source: $context.execution.name 
      - target: current_step_task_token 
        source: $context.task.token            

已集成云服务

方案 请求响应(requestResponse) 同步(sync) 等待回调(waitForCallback)
函数计算(FC)
消息服务队列(MNS Queue)
消息服务主题(MNS Topic)
Serverless 工作流(SWF)