

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon SWF 中的演員
<a name="swf-dev-actors"></a>

**Topics**
+ [什麼是 Amazon SWF 中的演員？](#what-is-an-actor-swf)
+ [工作流程啟動者](#swf-dev-actors-starters)
+ [決策者](#swf-dev-actors-deciders)
+ [活動工作者](#swf-dev-actors-activities)
+ [動作者之間的資料交換](#swf-dev-actors-dataex)

## 什麼是 Amazon SWF 中的演員？
<a name="what-is-an-actor-swf"></a>

在操作過程中，Amazon SWF 會與多種不同類型的程式設計*演員*互動。動作者可以是[工作流程啟動者](#swf-dev-actors-starters)、[決策者](#swf-dev-actors-deciders)或[活動工作者](#swf-dev-actors-activities)。這些演員會透過其 API 與 Amazon SWF 通訊。您可以使用任何程式設計語言來開發這些動作者。

下圖顯示 Amazon SWF 架構，包括 Amazon SWF 及其演員。

![\[Amazon SWF 工作流程中的不同實體或「動作者」。\]](http://docs.aws.amazon.com/zh_tw/amazonswf/latest/developerguide/images/swf-overview-actors.png)


## 工作流程啟動者
<a name="swf-dev-actors-starters"></a>

工作流程啟動者是任何可起始工作流程執行的應用程式。以電子商務為例，一個工作流程啟動者可以是客戶下單的網站。另一個工作流程啟動者可以是客戶服務代表用來代替客戶下單的行動應用程式或系統。

## 決策者
<a name="swf-dev-actors-deciders"></a>

決策者是工作流程協調性邏輯的實作。決策者負責控制工作流程執行內之活動任務的流程。只要在工作流程執行期間有所更動 (例如完成工作)，就會將決策任務 (包含整個工作流程歷史記錄) 傳遞給決策者。當決策者從 Amazon SWF 收到決策任務時，它會分析工作流程執行歷史記錄，以確定工作流程執行中的下一個適當步驟。決策者會使用*決策*將這些步驟傳回 Amazon SWF。決策是一種 Amazon SWF 資料類型，可代表各種後續動作。如需可能決策的清單，請前往《Amazon Simple Workflow Service API 參考》中的[決策](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_Decision.html)。

以下是 JSON 格式的決策範例，這是傳輸到 Amazon SWF 的格式。此決策會新的活動任務進行排程。

```
{
   "decisionType" : "ScheduleActivityTask",
   "scheduleActivityTaskDecisionAttributes" : {
      "activityType" : {
         "name" : "activityVerify",
         "version" : "1.0"
      },
      "activityId" : "verification-27",
      "control" : "digital music",
      "input" : "5634-0056-4367-0923,12/12,437",
      "scheduleToCloseTimeout" : "900",
      "taskList" : {
         "name": "specialTaskList"
      },
      "scheduleToStartTimeout" : "300",
      "startToCloseTimeout" : "600",
      "heartbeatTimeout" : "120"
   }
}
```

在工作流程執行啟動時，及每次工作流程執行內的狀態變更時，決策者會接收到決策任務。決策者透過接收決策任務並以更多決策回應 Amazon SWF，繼續推動工作流程執行，直到決策者判斷工作流程執行完成為止。直到最後，決策者會回應關閉工作流程執行的決策。工作流程執行關閉後，Amazon SWF 將不會排程該執行的其他任務。

在電子商務範例中，決策者會判斷是否正確地執行每個步驟，然後排程下一個步驟或管理任何錯誤情況。

決策者代表單一電腦程序或執行緒。多個決策者可以處理相同工作流程類型的任務。

## 活動工作者
<a name="swf-dev-actors-activities"></a>

活動工作者是一種程序或執行緒，可執行屬於工作流程一部分的「活動任務」**。活動任務代表您在應用程式中識別的其中一個任務。

若要在工作流程中使用活動任務，您必須使用 Amazon SWF 主控台或 [RegisterActivityType](https://docs.aws.amazon.com/amazonswf/latest/apireference/API_RegisterActivityType.html) 動作來註冊。

每個活動工作者都會輪詢 Amazon SWF 是否有適合該活動工作者執行的新任務；某些任務只能由特定活動工作者執行。收到任務後，活動工作者會處理任務以完成，然後向 Amazon SWF 報告任務已完成並提供結果。然後活動工作者會輪詢新任務。與工作流程執行相關聯的活動工作者會以此方式繼續處理任務，直到工作流程執行本身完成為止。在電子商務範例中，活動工作者是信用卡處理者和倉儲員工這類人員所使用的獨立程序和應用程式，可在程序中執行個別步驟。

活動工作者代表單一電腦程序 (或執行緒)。多個活動工作者可以處理相同活動類型的任務。

## 動作者之間的資料交換
<a name="swf-dev-actors-dataex"></a>

啟動工作流程執行時，即可將輸入資料提供給工作流程執行。同樣地，活動工作者為活動任務進行排程時，即可將輸入資料提供給活動工作者。當活動任務完成時，活動工作者可以將結果傳回給 Amazon SWF。同樣地，決策者可以在工作流程執行完成時報告其結果。每個演員都可以透過使用者定義的字串形式，向 Amazon SWF 傳送和接收資料。根據資料的大小和敏感度，您可以直接傳遞資料，或將指標傳遞至儲存在另一個系統或服務 （例如 Amazon S3 或 DynamoDB) 上的資料。直接傳遞的資料和其他資料存放區的指標都會記錄在工作流程執行歷史記錄中；不過，Amazon SWF 不會從外部存放區複製或快取任何資料做為歷史記錄的一部分。

由於 Amazon SWF 會維護每個工作流程執行的完整執行狀態，包括輸入和任務的結果，因此所有演員都可以是無狀態。工作流程處理因而極具擴展性。隨著系統負載的成長，您只要新增其他動作者即可增加容量。