Amazon Simple Workflow Service를 통한 독점적 선택 구현 - Amazon Simple Workflow Service

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

Amazon Simple Workflow Service를 통한 독점적 선택 구현

일부 시나리오에서는 이전 활동의 결과에 따라 여러 활동 세트를 예약하려고 할 수 있습니다. 독점적 선택 패턴을 사용하면 애플리케이션의 복잡한 요구 사항을 충족하는 유연한 워크플로를 생성할 수 있습니다.

Amazon Simple Workflow Service(SWF)에는 특정한 독점적 선택 작업이 없습니다. 독점적 선택을 사용하려면 이전 활동의 결과를 바탕으로 다른 결정을 내리는 결정자 로직을 작성하기만 하면 됩니다. 독점적 선택의 적용 사례는 다음과 같습니다.

  • 이전 활동의 결과가 실패인 경우 정리 활동 수행

  • 고객이 기본 또는 고급 요금제를 구입했는지 여부에 따라 다른 활동 예약

  • 고객의 주문 내역에 따라 다른 고객 인증 활동 수행

전자 상거래의 예에서 독점적 선택을 사용하면 신용카드 청구 결과에 따라 주문을 배송 또는 취소할 수 있습니다. 다음 그림에서 결정자는 신용카드가 성공적으로 청구된 경우 주문 발송 및 완료 기록 활동 작업을 예약합니다. 그렇지 않으면 주문 취소 및 고객에게 이메일 보내기 활동 작업을 예약합니다.

고객 주문 워크플로 다이어그램

신용카드에 성공적으로 청구되면 결정자가 ShipOrder 활동을 예약합니다. 그렇지 않으면 결정자는 CancelOrder 활동을 예약합니다.

이 경우 내역을 해석하고 신용카드에 성공적으로 청구되었는지 여부를 확인하도록 결정자를 프로그래밍합니다. 이렇게 하려면 다음과 유사한 로직이 있어야 합니다.

IF lastEvent = "WorkflowExecutionStarted" addToDecisions ScheduleActivityTask(ActivityType = "VerifyOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "VerifyOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "ChargeCreditCardActivity") #Successful Credit Card Charge Activities ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "ChargeCreditCardActivity" addToDecisions ScheduleActivityTask(ActivityType = "ShipOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "ShipOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "RecordOrderCompletionActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "RecordOrderCompletionActivity" addToDecisions CompleteWorkflowExecution #Unsuccessful Credit Card Charge Activities ELSIF lastEvent = "ActivityTaskFailed" AND ActivityType = "ChargeCreditCardActivity" addToDecisions ScheduleActivityTask(ActivityType = "CancelOrderActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "CancelOrderActivity" addToDecisions ScheduleActivityTask(ActivityType = "EmailCustomerActivity") ELSIF lastEvent = "ActivityTaskCompleted" AND ActivityType = "EmailCustomerActivity" addToDecisions CompleteWorkflowExecution ENDIF

신용카드에 성공적으로 청구되면 결정자는 RespondDecisionTaskCompleted로 응답해 ShipOrder 활동을 예약해야 합니다.

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions":[ { "decisionType":"ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes":{ "control":"OPTIONAL_DATA_FOR_DECIDER", "activityType":{ "name":"ShipOrder", "version":"2.4" }, "activityId":"3e2e6e55-e7c4-fee-deed-aa815722b7be", "scheduleToCloseTimeout":"3600", "taskList":{ "name":"SHIPPING" }, "scheduleToStartTimeout":"600", "startToCloseTimeout":"3600", "heartbeatTimeout":"300", "input": "123 Main Street, Anytown, United States" } } ] }

신용카드에 성공적으로 청구되지 않으면 결정자는 RespondDecisionTaskCompleted로 응답해 CancelOrder 활동을 예약해야 합니다.

https://swf.us-east-1.amazonaws.com RespondDecisionTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "decisions":[ { "decisionType":"ScheduleActivityTask", "scheduleActivityTaskDecisionAttributes":{ "control":"OPTIONAL_DATA_FOR_DECIDER", "activityType":{ "name":"CancelOrder", "version":"2.4" }, "activityId":"3e2e6e55-e7c4-fee-deed-aa815722b7be", "scheduleToCloseTimeout":"3600", "taskList":{ "name":"CANCELLATIONS" }, "scheduleToStartTimeout":"600", "startToCloseTimeout":"3600", "heartbeatTimeout":"300", "input": "Out of Stock" } } ] }

Amazon SWF에서 RespondDecisionTaskCompleted 작업의 데이터를 확인할 수 있는 경우 Amazon SWF는 다음과 유사한 성공적인 HTTP 응답을 반환합니다.

HTTP/1.1 200 OK Content-Length: 11 Content-Type: application/json x-amzn-RequestId: 93cec6f7-0747-11e1-b533-79b402604df1