HelloWorldWorkflowParallel 애플리케이션 - AWS Flow Framework 자바용

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HelloWorldWorkflowParallel 애플리케이션

Hello World!의 모든 이전 버전에서는 선형 워크플로 토폴로지를 사용합니다. 그러나 Amazon SWF는 선형 토폴로지에 국한되지 않습니다. 아래 그림에서와 같이 HelloWorldWorkflowParallel 애플리케이션은 병렬 토폴로지를 사용하는 HelloWorldWorkflow의 수정 버전입니다.

HelloWorldWorkflowParallel 워크플로 토폴로지

HelloWorldWorkflowParallel의 경우 getNamegetGreeting은 병렬로 실행되며 각기 인사의 일부를 반환합니다. 그러면 say는 두 문자열을 인사로 병합한 후 이를 콘솔에 출력합니다.

애플리케이션을 구현하려면 프로젝트 디렉터리에 helloWorld.HelloWorldWorkflow 패키지의 사본을 생성하고 이 사본의 이름을 helloWorld.HelloWorldWorkflowParallel로 지정합니다. 다음 단원에서는 원본 HelloWorldWorkflow 코드를 수정하여 getNamegetGreeting을 병렬로 실행하는 방법을 설명합니다.

HelloWorldWorkflowParallel 활동 작업자

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); } }

getNamegetGreeting는 이제 인사 문자열의 절반만 반환합니다. say는 그 두 부분을 연결하여 완전한 구를 만든 후 이를 콘솔에 출력합니다.

HelloWorldWorkflowParallel 워크플로 작업자

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는 getGreetingname을 전달하였습니다. namePromise<T> 객체였으므로 getGreeting에서는 getName이 완료될 때까지 활동 실행을 연기하였고, 이로 인해 두 활동은 순차적으로 실행되었습니다.

  • HelloWorldWorkflowParallel은 입력 getName 또는 getGreeting을 전달하지 않습니다. 두 메서드 모두 실행을 연기하지 않고 연결된 활동 메서드에서는 즉시 병렬로 실행합니다.

say 활동은 greetingname 모두를 입력 파라미터로 받아들입니다. 이 둘은 Promise<T> 객체이므로 say에서는 두 활동이 완료될 때까지 실행을 연기한 후 인사를 구성하여 출력합니다.

HelloWorldWorkflowParallel에서는 워크플로 토폴로지를 정의할 때 특수 모델링 코드를 사용하지 않습니다. 대신에 표준 Java 플로우 제어를 사용하고 Promise<T> 객체의 속성을 이용하여 묵시적으로 정의합니다. AWS Flow Framework for Java 애플리케이션에서는 기존 Java 제어 플로우 구성과 함께 Promise<T> 객체를 사용하는 간단한 방법으로 복잡한 토폴로지를 구현할 수 있습니다.

HelloWorldWorkflowParallel 워크플로 및 활동 호스트와 시작자

HelloWorldWorkflowParallel에서는 GreeterWorker를 워크플로 및 활동 구현에 대해 호스트 클래스로 구현합니다. 이것은 "HelloWorldParallelList"로 설정된 taskListToPoll 이름 외에는 HelloWorldWorkflow 구현과 동일합니다.

HelloWorldWorkflowParallel에서는 GreeterMain에 워크플로 시작자를 구현하는데, 이는 HelloWorldWorkflow 구현과 동일합니다.

워크플로를 실행하려면 HelloWorldWorkflow와 마찬가지로 GreeterWorkerGreeterMain을 실행하십시오.