

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# HelloWorldWorkflowParallel 应用程序
<a name="getting-started-example-helloworldworkflowparallel"></a>

以前版本的 Hello World\$1 均使用线性工作流程拓扑。不过，Amazon SWF 并不仅限于线性拓扑。该 HelloWorldWorkflowParallel 应用程序是使用并行拓扑的 HelloWorldWorkflow 修改版本，如下图所示。

![\[HelloWorldWorkflowParallel 工作流程拓扑\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/awsflowguide/images/helloworld_parallel_topology.png)


wit HelloWorldWorkflowParallel h、`getName` and 并行`getGreeting`运行，每个都返回问候语的部分。 `say`然后将这两个字符串合并成问候语，并将其打印到控制台。

要实现该应用程序，请创建 HelloWorld 的副本。 HelloWorldWorkflow 打包到你的项目目录中然后把它命名为 HelloWorld。 HelloWorldWorkflowParallel。以下各节介绍如何修改原始 HelloWorldWorkflow 代码以使其`getName`并`getGreeting`行运行。

## HelloWorldWorkflowParallel 活动工作者
<a name="getting-started-example-helloworldworkflowparallel.activities"></a>

 HelloWorldWorkflowParallel 活动接口是在中实现的`GreeterActivities`，如以下示例所示。

```
import com.amazonaws.services.simpleworkflow.flow.annotations.Activities;
import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions;

@Activities(version="5.0")
@ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300,
                             defaultTaskStartToCloseTimeoutSeconds = 10)
public interface GreeterActivities {
   public String getName();
   public String getGreeting();
   public void say(String greeting, String name);
}
```

该接口与类似 HelloWorldWorkflow，但有以下例外：
+ `getGreeting` 不使用任何输入；它仅返回问候语字符串。
+ `say` 使用两种输入字符串：问候语和名称。
+ 该接口具有新的版本号，在任何时候更改注册的接口时，需要使用该版本号。

HelloWorldWorkflowParallel 在中实施活动`GreeterActivitiesImpl`，如下所示：

```
public class GreeterActivitiesImpl implements GreeterActivities {

   @Override
   public String getName() {
      return "World!";
   }

   @Override
   public String getGreeting() {
      return "Hello ";
   }

   @Override
   public void say(String greeting, String name) {
      System.out.println(greeting + name);
   }
}
```

`getName` 和 `getGreeting` 现在仅返回问候语字符串的一半。`say` 连接两个部分以生成完整的短语，并将其输出到控制台。

## HelloWorldWorkflowParallel 工作流程工作者
<a name="getting-started-example-helloworldworkflowparallel-worker"></a>

工作 HelloWorldWorkflowParallel 流接口是在中实现的`GreeterWorkflow`，如下所示：

```
import com.amazonaws.services.simpleworkflow.flow.annotations.Execute;
import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow;
import com.amazonaws.services.simpleworkflow.flow.annotations.WorkflowRegistrationOptions;

@Workflow
@WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600)
public interface GreeterWorkflow {

   @Execute(version = "5.0")
   public void greet();
}
```

该类与 HelloWorldWorkflow 版本相同，唯一的不同是版本号已更改为与活动工作程序相匹配。

工作流程是在 `GreeterWorkflowImpl` 中实现的，如下所示：

```
import com.amazonaws.services.simpleworkflow.flow.core.Promise;

public class GreeterWorkflowImpl implements GreeterWorkflow {
   private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl();

   public void greet() {
      Promise<String> name = operations.getName();
      Promise<String> greeting = operations.getGreeting();
      operations.say(greeting, name);
   }
}
```

乍一看，这个实现看起来非常相似 HelloWorldWorkflow；客户端方法的三个活动是按顺序执行的。但活动不是按顺序执行的。
+ HelloWorldWorkflow 传递`name`给`getGreeting`。由于 `name` 是一个 `Promise<T>` 对象，`getGreeting` 推迟执行活动，直到 `getName` 完成，因此，两个活动按顺序执行。
+ HelloWorldWorkflowParallel 未通过任何输入`getName`或`getGreeting`。两种方法都不会推迟执行，并立即并行执行关联的活动方法。

`say` 活动将 `greeting` 和 `name` 作为输入参数。由于它们是 `Promise<T>` 对象，`say` 推迟执行，直到两个活动完成，然后构建并输出问候语。

请注意， HelloWorldWorkflowParallel 它不使用任何特殊的建模代码来定义工作流程拓扑。它通过使用标准的 Java 流量控制并利用`Promise<T>`对象的属性来隐式地做到这一点。 AWS Flow Framework for Java 应用程序只需将`Promise<T>`对象与传统 Java 控制流结构结合使用即可实现即使是复杂的拓扑。

## HelloWorldWorkflowParallel 工作流程和活动主持人和入门者
<a name="HelloWorldWorkflowParallel-workflow-activities-host-starter"></a>

HelloWorldWorkflowParallel 实现`GreeterWorker`为工作流程和活动实现的主机类。除了`taskListToPoll`名称设置为 “HelloWorldParallelList” 之外，它与 HelloWorldWorkflow 实现相同。

`HelloWorldWorkflowParallel`在中实现了工作流程启动器`GreeterMain`，它与 HelloWorldWorkflow 实现相同。

要执行工作流程，请运行 `GreeterWorker` 和 `GreeterMain`，就像 `HelloWorldWorkflow` 一样。