실행 콘텍스트 - AWS Flow Framework 자바용

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

실행 콘텍스트

프레임워크에서는 워크플로 및 활동 구현에 주변 컨텍스트를 제공합니다. 이 컨텍스트는 처리 중인 작업에 고유한 것으로서, 사용자가 자신의 구현에 사용할 수 있는 약간의 유틸리티를 제공합니다. 컨텍스트 객체는 작업자가 새 작업을 처리할 때마다 생성됩니다.

결정 컨텍스트

결정 작업이 실행될 때 프레임워크에서는 DecisionContext 클래스를 통해 워크플로 구현에 컨텍스트를 제공합니다. DecisionContext에서는 워크플로 실행의 실행 ID와 클록 및 타이머 기능과 같이 컨텍스트에 맞는 정보를 제공합니다.

워크플로 구현의 DecisionContext에 액세스

DecisionContextProviderImpl 클래스를 사용하여 워크플로 구현의 DecisionContext에 액세스합니다. 또는 "테스트 가능성 및 종속성 주입" 단원에 나와 있는 것처럼 Spring을 사용하여 워크플로 구현의 필드 또는 속성에 컨텍스트를 주입할 수 있습니다.

DecisionContextProvider contextProvider = new DecisionContextProviderImpl(); DecisionContext context = contextProvider.getDecisionContext();

클록 및 타이머 생성

DecisionContext에는 타이머 및 클록 기능을 제공하는 WorkflowClock 유형의 속성이 포함되어 있습니다. 워크플로 로직은 결정적이어야 하므로 워크플로 구현에서 시스템 클록을 직접 사용해서는 안 됩니다. WorkflowClockcurrentTimeMills 메서드에서는 처리 중인 결정의 시작 이벤트 시각을 반환합니다. 이를 통해 다시 재생 중에 동일한 시각을 가져올 수 있고, 따라서 워크플로 로직은 결정적인 것이 됩니다.

WorkflowClock에도 지정된 간격이 지나면 준비 상태가 되는 Promise 객체를 반환하는 createTimer 메서드가 있습니다. 이 값을 다른 비동기식 메서드에 파라미터로 사용하여 지정된 시간까지 실행을 연기할 수 있습니다. 이로써 비동기식 메서드 또는 활동을 나중에 실행하기 위해 효과적으로 예약할 수 있습니다.

다음 목록의 예시에서는 활동을 주기적으로 호출하는 방법을 보여줍니다.

@Workflow @WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 60, defaultTaskStartToCloseTimeoutSeconds = 10) public interface PeriodicWorkflow { @Execute(version = "1.0") void periodicWorkflow(); } @Activities(version = "1.0") @ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 3600) public interface PeriodicActivity { void activity1(); } public class PeriodicWorkflowImpl implements PeriodicWorkflow { private DecisionContextProvider contextProvider = new DecisionContextProviderImpl(); private WorkflowClock clock = contextProvider.getDecisionContext().getWorkflowClock(); @Override public void periodicWorkflow() { callPeriodicActivity(0); } @Asynchronous private void callPeriodicActivity(int count, Promise<?>... waitFor) { if (count == 100) { return; } PeriodicActivityClient client = new PeriodicActivityClientImpl(); // call activity Promise<Void> activityCompletion = client.activity1(); Promise<Void> timer = clock.createTimer(3600); // Repeat the activity either after 1 hour or after previous activity run // if it takes longer than 1 hour callPeriodicActivity(count + 1, timer, activityCompletion); } } public class PeriodicActivityImpl implements PeriodicActivity { @Override public void activity1() { ... } }

위 목록에서 callPeriodicActivity 비동기식 메서드는 activity1를 호출한 후 현재 AsyncDecisionContext를 사용하여 타이머를 생성합니다. 이 메서드는 반환된 Promise를 자신에 대한 재귀적 호출에 인수로 전달합니다. 이 재귀적 호출은 타이머가 소진될 때까지(이 예시에서는 1시간) 대기했다가 실행됩니다.

활동 실행 컨텍스트

DecisionContext에서 결정 작업이 처리 중일 때 컨텍스트 정보를 제공하는 것과 마찬가지로 ActivityExecutionContext에서는 활동 작업이 처리 중일 때 이와 유사한 컨텍스트 정보를 제공합니다. 이 컨텍스트는 ActivityExecutionContextProviderImpl 클래스를 통해 사용자의 활동 코드에 제공됩니다.

ActivityExecutionContextProvider provider = new ActivityExecutionContextProviderImpl(); ActivityExecutionContext aec = provider.getActivityExecutionContext();

ActivityExecutionContext를 사용하여 다음 작업을 수행할 수 있습니다.

장시간 실행 활동에 하트비트 사용

활동이 장시간 실행되는 경우 Amazon SWF에 진행 상황을 주기적으로 보고하여 작업이 여전히 진행 중임을 알려야 합니다. 그러한 하트비트가 없는 경우 작업 하트비트 제한 시간이 활동 유형 등록 시 또는 활동 예약 중에 설정되었다면 작업이 제한 시간을 초과할 수 있습니다. 하트비트를 전송하려면 ActivityExecutionContextrecordActivityHeartbeat 메서드를 사용할 수 있습니다. 또한 하트비트에서는 지속적인 활동을 취소할 수 있는 메커니즘을 제공합니다. 추가 세부 정보 및 예시는 오류 처리 단원을 참조하십시오.

활동 작업에 관한 세부 정보 얻기

원하는 경우 실행기가 작업을 가져왔을 때 Amazon SWF에서 전달한 활동 작업에 관한 모든 세부 정보를 얻을 수 있습니다. 이 정보에는 작업, 작업 유형, 작업 토큰 등에 대한 입력에 관한 정보가 포함되어 있습니다. 예를 들어 사람의 작업에 의해 수동으로 완료되는 활동을 구현하려는 경우 ActivityExecutionContext를 사용하여 작업 토큰을 검색하고 이를 활동 작업을 완료하는 프로세스에 전달해야 합니다. 자세한 내용은 활동을 수동으로 완료 단원을 참조하십시오.

실행기에서 사용 중인 Amazon SWF 클라이언트 객체 가져오기

실행기에서 사용 중인 Amazon SWF 클라이언트 객체는 ActivityExecutionContextgetService 메서드를 직접적으로 호출하여 가져올 수 있습니다. 이 기능은 Amazon SWF 서비스를 직접 호출하려는 경우에 유용합니다.