AWS Flow Framework 기본 개념: 작업 목록 및 작업 실행 - AWS Flow Framework Java용

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

AWS Flow Framework 기본 개념: 작업 목록 및 작업 실행

Amazon SWF는 워크플로와 활동 작업을 이름이 지정된 목록에 게시하는 방법으로 관리합니다. Amazon SWF는 워크플로 작업자 및 활동 작업자 각각에 대해 하나씩, 최소 두 가지 작업 목록을 보관합니다.

참고

사용자는 목록마다 다른 작업자를 할당하여 필요한 개수 만큼 작업 목록을 지정할 수 있습니다. 작업 목록의 개수에는 제한이 없습니다. 일반적으로 작업자 객체를 생성할 때 작업자 호스트 애플리케이션에 작업자의 작업을 지정합니다.

다음은 HelloWorldWorkflow 호스트 애플리케이션에서 발췌한 것으로서, 새 활동 작업자를 생성하여 이를 HelloWorldList 활동 작업 목록에 할당합니다.

public class GreeterWorker { public static void main(String[] args) throws Exception { ... String domain = " helloWorldExamples"; String taskListToPoll = "HelloWorldList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); ... } }

기본적으로 Amazon SWF는 HelloWorldList 목록의 작업자 작업을 예약합니다. 그런 다음 작업자는 작업에 대해 이 목록을 폴링합니다. 작업 목록에는 어떤 이름도 지정할 수 있습니다. 심지어 워크플로 및 활동 목록에 같은 이름을 사용할 수도 있습니다. 내부적으로 Amazon SWF는 워크플로 및 활동 작업 목록 이름을 여러 가지 네임스페이스에 배치하므로 두 목록은 서로 구분됩니다.

작업 목록을 지정하지 않는 경우 작업자가 Amazon SWF에 유형을 등록할 때 에서 기본 목록을 AWS Flow Framework 지정합니다. 자세한 설명은 워크플로 및 활동 유형 등록 섹션을 참조하세요.

특정 작업자 또는 작업자 그룹에서 특정 작업을 수행하도록 하는 것이 더 좋은 경우가 때로 있습니다. 예를 들면 이미지 처리 워크플로에서는 한 활동을 사용하여 이미지를 다운로드하고 다른 활동을 사용하여 이미지를 처리할 수 있습니다. 동일 시스템에서 두 가지 작업을 수행하여 네트워크를 통해 대규모 파일을 전송하는 오버헤드를 피하는 것이 더 효율적입니다.

그러한 상황을 지원하기 위해 schedulingOptions 파라미터가 포함된 오버로드를 사용하여 활동 클라이언트 메서드를 호출할 때 작업 목록을 명시적으로 지정할 수 있습니다. 메서드에 적절하게 구성된 객체를 전달하여 작업 목록을 지정합니다. ActivitySchedulingOptions

예를 들어 HelloWorldWorkflow 애플리케이션의 say 활동을 getNamegetGreeting과는 다른 활동 작업자가 호스팅한다고 가정합시다. 다음 예시에서는 say에서 getNamegetGreeting이 처음부터 서로 다른 목록에 할당되었다 하더라도 이 둘과 동일한 작업 목록을 사용하도록 하는 방법을 보여줍니다.

public class GreeterWorkflowImpl implements GreeterWorkflow { private GreeterActivitiesClient operations1 = new GreeterActivitiesClientImpl1(); //getGreeting and getName private GreeterActivitiesClient operations2 = new GreeterActivitiesClientImpl2(); //say @Override public void greet() { Promise<String> name = operations1.getName(); Promise<String> greeting = operations1.getGreeting(name); runSay(greeting); } @Asynchronous private void runSay(Promise<String> greeting){ String taskList = operations1.getSchedulingOptions().getTaskList(); ActivitySchedulingOptions schedulingOptions = new ActivitySchedulingOptions(); schedulingOptions.setTaskList(taskList); operations2.say(greeting, schedulingOptions); } }

비동기식 runSay 메서드는 클라이언트 객체로부터 getGreeting 작업 목록을 가져옵니다. 그런 다음 say에서 getGreeting과 동일한 작업 목록을 폴링하도록 하는 ActivitySchedulingOptions 객체를 생성 및 구성합니다.

참고

사용자가 schedulingOptions 파라미터를 활동 클라이언트 메서드에 전달하면 이 메서드에서는 이 활동 실행에 대해서만 원본 작업 목록을 재정의합니다. 사용자가 작업 목록을 지정하지 않고 활동 클라이언트 메서드를 다시 직접적으로 호출하면 Amazon SWF가 작업을 원본 목록에 할당하고 활동 작업자는 이 목록을 폴링합니다.