워크플로 및 활동 계약 - AWS Flow Framework 자바용

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

워크플로 및 활동 계약

워크플로 및 활동의 서명을 선언하는 데 Java 인터페이스를 사용합니다. 이 인터페이스는 워크플로(또는 활동)와 이 워크플로(또는 활동)의 클라이언트 사이의 계약을 형성합니다. 예를 들어 MyWorkflow 워크플로 유형은 다음과 같이 @Workflow 주석이 붙은 인터페이스를 사용하여 정의됩니다.

@Workflow @WorkflowRegistrationOptions( defaultExecutionStartToCloseTimeoutSeconds = 60, defaultTaskStartToCloseTimeoutSeconds = 10) public interface MyWorkflow { @Execute(version = "1.0") void startMyWF(int a, String b); @Signal void signal1(int a, int b, String c); @GetState MyWorkflowState getState(); }

계약에는 구현별 설정이 없습니다. 이와 같은 구현 중립적 계약을 사용함으로써 클라이언트는 구현에서 분리될 수 있고, 따라서 클라이언트와 분리되지 않고도 구현 세부 정보를 변경할 수 있는 유연성을 얻게 됩니다. 반대로 사용자는 사용 중인 워크플로 또는 활동을 변경하지 않고도 클라이언트를 변경할 수 있습니다. 예를 들어 활동 구현을 변경하지 않고도 약속(Promise<T>)을 사용하여 비동기식으로 활동을 호출하도록 클라이언트를 수정할 수 있습니다. 마찬가지로, 활동 구현은 활동의 클라이언트를 변경할 필요 없이, 예를 들어 이메일을 보내는 사람에 의해 비동기적으로 완료되도록 변경할 수 있습니다.

위 예시에서 워크플로 인터페이스 MyWorkflow에는 새 실행을 시작하기 위한 startMyWF 메서드가 포함되어 있습니다. 이 메서드에는 @Execute 주석이 달려 있고 void 또는 Promise<> 반환 유형이 있어야 합니다. 특정 워크플로 인터페이스에는 최대 한 개의 메서드에 이 주석이 달릴 수 있습니다. 이 메서드는 워크플로 로직의 진입점이며, 프레임워크에서는 결정 작업을 수신하면 이 메서드를 호출하여 워크플로 로직을 실행합니다.

또한 워크플로 인터페이스에서는 워크플로로 전송할 수 있는 신호를 정합니다. 이 신호 메서드는 워크플로 실행에서 일치하는 이름이 있는 신호를 수신하면 호출됩니다. 예를 들어 MyWorkflow 인터페이스에서는 @Signal 주석이 붙은 signal1 신호 메서드를 선언합니다.

@Signal 주석은 신호 메서드에서 필요합니다. 신호 메서드의 반환 유형은 void이어야 합니다. 워크플로 인터페이스에는 0개 이상의 신호 메서드가 정의되어 있을 수 있습니다. 사용자는 @Execute 메서드 및 일부 @Signal 메서드 없이 워크플로 인터페이스를 선언함으로써 실행을 시작할 수는 없지만 실행 중인 실행에 신호를 전송할 수 있는 클라이언트를 생성할 수 있습니다.

@Execute@Signal 주석이 달린 메서드에는 Promise<T> 또는 그 파생물이 아닌 유형의 파라미터가 몇 개든 있을 수 있습니다. 이를 통해 사용자는 워크플로 실행 시작 시 및 실행 중에 형식이 강력히 지정된 입력을 워크플로 실행에 전달할 수 있습니다. @Execute 메서드의 반환 유형은 void 또는 Promise<>이어야 합니다.

뿐만 아니라 사용자는 워크플로 인터페이스에서 메서드를 선언하여 워크플로 실행의 최신 상태를 보고할 수 있습니다(예: 앞서 본 예시의 getState 메서드). 이 상태는 워크플로의 전체 애플리케이션 상태가 아닙니다. 이 기능을 의도적으로 사용함으로써 사용자는 실행의 최신 상태를 나타낼 데이터를 최대 32KB까지 저장할 수 있습니다. 예를 들어 주문 처리 워크플로에서 사용자는 주문 접수, 처리 또는 취소를 나타내는 문자열을 저장할 수 있습니다. 이 메서드는 결정 작업이 완료될 때마다 최신 상태를 가져오기 위해 프레임워크의 호출을 받습니다. 이 상태는 Amazon Simple Workflow Service(SWF)에 저장되어 있어 생성된 외부 클라이언트를 사용하여 가져올 수 있습니다. 이를 통해 사용자는 워크플로 실행의 최신 상태를 확인할 수 있습니다. @GetState가 주석으로 달린 메서드에서는 인수를 받아들여서는 안 되고 void 반환 유형이 있어서는 안 됩니다. 사용자는 이 메서드에서 필요에 따라 어떤 유형도 반환할 수 있습니다. 위 예시에서 MyWorkflowState의 객체(아래 정의 참조)는 문자열 상태 및 숫자 형식의 백분율로 표시되는 완료율을 저장하는 데 사용되는 메서드에서 반환합니다. 이 메서드는 워크플로 구현 객체의 읽기 전용 액세스를 수행할 것으로 예상되고 동기식으로 호출됩니다. 이로써 @Asynchronous라는 주석이 달린 메서드를 호출하는 것과 같은 모든 비동기식 작업의 사용을 허용하지 않습니다. 워크플로 인터페이스에 있는 메서드 중 최대 한 개에 @GetState 주석이 달릴 수 있습니다.

public class MyWorkflowState { public String status; public int percentComplete; }

이와 마찬가지로 일련의 활동은 @Activities 주석이 붙은 인터페이스를 사용하여 정의됩니다. 인터페이스의 각 메서드는 활동에 해당합니다. 예를 들면 다음과 같습니다.

@Activities(version = "1.0") @ActivityRegistrationOptions( defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 3600) public interface MyActivities { // Overrides values from annotation found on the interface @ActivityRegistrationOptions(description = "This is a sample activity", defaultTaskScheduleToStartTimeoutSeconds = 100, defaultTaskStartToCloseTimeoutSeconds = 60) int activity1(); void activity2(int a); }

인터페이스를 통해 사용자는 관련된 일련의 활동을 함께 그룹화할 수 있습니다. 사용자는 활동 인터페이스 내에 개수에 상관없이 활동을 정의할 수 있고, 활동 인터페이스도 원하는 개수 만큼 정의할 수 있습니다. @Execute@Signal 메서드와 마찬가지로 활동 메서드에서는 Promise<T> 또는 그 파생물이 아닌 유형의 인수를 몇 개든 받아들일 수 있습니다. 활동의 반환 유형은 Promise<T> 또는 그 파생물이어서는 안 됩니다.