기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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
활동을 getName
및 getGreeting
과는 다른 활동 작업자가 호스팅한다고 가정합시다. 다음 예시에서는 say
에서 getName
및 getGreeting
이 처음부터 서로 다른 목록에 할당되었다 하더라도 이 둘과 동일한 작업 목록을 사용하도록 하는 방법을 보여줍니다.
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가 작업을 원본 목록에 할당하고 활동 작업자는 이 목록을 폴링합니다.