Amazon Simple Workflow Service
开发人员指南 (API 版本 2012-01-25)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon SWF 中的高级概念

基本理念 章节中的电子商务示例表示的是简单的工作流程场景。事实上,您可能希望您的工作流程执行并行任务(在核准信用卡的同时发送订单确认)、记录主要事件(所有项目都组到一起)、更新订单更改(增加或删除项目)以及进行其它更多高级决定作为工作流程执行的一部分。本章节描述的是高级工作流程功能,您可以用这些功能构建坚固复杂的工作流程。

版本控制

业务通常需要您对同一工作流程采用不同的实现方式或变化,或者需要同时运行多个活动。例如,您可能想要在另一个工作流程处于生产中时测试新执行的工作流程。您还可能想要用两种不同的功能集运行两个不同的执行,如基本和高级执行。您可以通过版本控制同时执行多个工作流程和活动,以满足您的要求。

工作流程和活动类型都有一个与之相关的版本,在注册时指定。版本是自由格式的字符串,您可以选择您自己的版本控制方案。为了能够创建某个已注册类型的新版本,您应该用同一名称和不同版本进行注册。早前描述过的 任务列表 可进一步帮助您执行版本控制。考虑这样一个情形,您的给定类型长期运行工作流程执行正在进程中,并考虑需要您修改工作流程(如增加新功能)的情况。您可以通过创建新版本的活动类型和工作程序以及新决策程序。然后,您可以使用不同组的任务列表启动新工作流程版本的执行。通过这种方式,您可以同时运行不同版本工作流程的执行,而不会相互造成影响。

信号

信号可使您将信息插入正在运行的工作流程执行中。在某些应用场景中,建议您将信息增加到正在运行的工作流程执行中,使其了解有些情况发生了改变或向其通知外部事件。任何过程都能发送信号到开启的工作流程执行中。例如,一个工作流程执行可向另一个发送信号。

若要使用信号,请定义信号名称和将要传递至信号的数据(如果有)。然后,编写决策程序程序以在历史纪录中识别信号事件 (WorkflowExecutionSignaled) 并适当处理该事件。当一个进程需要发出工作流程执行的信号时,它会调用 Amazon SWF(使用 SignalWorkflowExecution 操作,或对于决策程序而言,使用 SignalExternalWorkflowExecution 决策),后者会指定目标工作流程执行的标识符、信号名称和信号数据。然后,Amazon SWF 接收该信号,将其记录在目标工作流程执行的历史记录中,然后为其排定决策任务。当决策程序收到决策任务时,它还会接收到工作流程执行历史内部的信号。然后,决策程序可根据信号及其数据采取适当操作。

以下是信号的一些应用情况:

  • 暂停工作流程执行的进展,直到收到信号(例如,等待库存发货)。

  • 向工作流程执行提供可能会影响决策程序做决策之逻辑的信息。这对受外部事件(例如,尝试在闭市后完成股票销售)影响的工作流程很有用。

  • 在您期望发生更改时(例如,在下订单后发货之前更改订单数量)更新工作流程执行。

对于向订单被客户取消这样的工作流程应被取消的情况,应使用 RequestCancelWorkflowExecution 操作而不是向工作流程发送信号。

子工作流程

复杂的工作流程可使用子工作流程分解为更小、更可管理且有可能被重用的组件。子工作流程是被另一个(上层)工作流程执行启动的工作流程执行。要启动子工作流程,上层工作流程的决策程序应使用 StartChildWorkflowExecution 决策。用此决策指定的输入数据可通过其历史记录提供给子工作流程。

StartChildWorkflowExecution 决策的属性还会指定子策略,即 Amazon SWF 对父工作流程执行在子工作流程执行之前终止这种情况的处理方式。可能存在以下三种值:

  • TERMINATE:Amazon SWF 将终止子执行。

  • REQUEST_CANCEL:Amazon SWF 将通过在子工作流程执行历史记录中放置 WorkflowExecutionCancelRequested 事件的方式尝试取消子执行。

  • ABANDON:Amazon SWF 不会进行任何操作;子执行将继续运行。

子工作流程执行启动后,其运行方式类似于常规执行。执行完成时,Amazon SWF 会将完成情况及其结果记录在父工作流程执行的工作流程历史中。子工作流程的示例包括以下内容:

  • 在不同网站中被工作流程所使用的处理子工作流程的信号卡

  • 用于验证客户电子邮件地址、检查退出列表、发送电子邮件以及验证电子邮件未被退回或发送失败的电子邮件子工作流程。

  • 将连接、设置、交易和验证进行组合的数据库存储和检索子工作流程。

  • 将构建、包装和验证相结合的源代码编译子工作流程.

在电子商务示例中,建议您将 Charge Credit Card 活动设为子工作流程。为了实现这一操作,您可以注册一个新的 Verify Customer 工作流程、注册 Verify Customer Address 和 Check Fraud DB 活动,并定义任务的协同逻辑。然后,Customer Order 工作流程的决策程序可通过排定 StartChildWorkflowExecution 决策来指定此工作流程类型,从而启动 Verify Customer 子工作流程。

下图所示为客户订单工作流程,其中包括一个新的 Verify Customer 子工作流程,用于检验客户地址、欺诈数据库和用信用卡付费。

 子工作流程图

多个工作流程可使用同一种工作流程类型创建子工作流程执行。例如,Verify Customer 子工作流程还能用在机构的其它部分。子工作流程的事件包含在其自己的工作流程历史中,而不包含在上层工作流程历史中。

由于子工作流程是由决策程序启动的简单工作流程执行,它们还可作为正常的独立工作流程执行启动。

标记

有时,建议您将信息记录在您的使用案例之特定工作流程执行的工作流程历史中。您可以通过标记将信息记录在工作流程执行历史中,从而使您能将其用于任何自定义和适合特定情景的目的。

为了使用标记,决策程序会使用 RecordMarker 决策,对标记进行命名,向决策附加所需的数据,并使用 RespondDecisionTaskCompleted 操作来通知 Amazon SWF。Amazon SWF 接收请求,将标记记录在工作流程历史中,并在请求中制定其他决策。从那一刻其,决策程序就能在工作流程历史中查看标记并通过您编程所用任何方式使用该标记。

以下为标记示例:

  • 用于对递归工作流程中的回路数进行计数的计数器。

  • 根据活动结果进行的工作流程执行的进度。

  • 从较早的工作流程历史事件总结的信息。

在电子商务示例中,您可以增加按日检查库存以及每次递增标记计数的活动。然后,您可以增加决策逻辑,以在计数超出五时发送电子邮件给客户或通知管理人员,无需审查整个历史记录。

标签

借助于 Amazon SWF,您可以将标签与工作流程执行相关联,随后基于这次标签来查询工作流程执行情况。您可以通过加标签在您使用可见性操作时筛选执行列表。通过仔细筛选您向执行分配的标签,您可以使用这些标签帮助提供有意义的列表。

举例来说,假设您在运行多个订单履行中心。适当加标签可使您列出特定订单履行中心内发生的流程。或者,另举一例,如果客户要转换不同类型的媒体文件,您可以通过加标签显示视频、音频和图像文件转换所用流程的差异。

Amazon SWF 支持为一个工作流程执行添加最多加五个标签。每个标签都是自由格式的字符串,长度最多为 256 个字符。如果您想使用标签,您必须在启动工作流程执行时分配标签。您不能再工作流程执行启动之后将标签增加到该执行中,您也不能编辑或删除已分配到工作流程执行中的标签。