신호 - Amazon Simple Workflow Service

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

신호

신호를 통해서는 실행 중인 워크플로 실행에 정보를 삽입할 수 있습니다. 일부 시나리오에서는 실행 중인 워크플로 실행에 정보를 추가해 워크플로에 어떤 부분이 변경되었음을 알리거나 외부 이벤트에 대해 알릴 수 있습니다. 모든 프로세스에서 열린 워크플로 실행에 신호를 보낼 수 있습니다. 예를 들어 워크플로 실행 하나가 다른 워크플로에 신호를 보낼 수 있습니다.

참고

열리지 않은 워크플로 실행에 신호를 보내려고 하면 SignalWorkflowExecution 실패로 이어지고 UnknownResourceFault가 발생합니다.

신호를 사용하려면 신호에 전달할 신호 이름과 데이터(있는 경우)를 정의하십시오. 그런 다음 내역에 있는 신호 이벤트(WorkflowExecutionSignaled)를 인식해 적절하게 처리하도록 결정자를 프로그래밍합니다. 프로세스가 워크플로 실행에 신호를 보내려는 경우, 대상 워크플로 실행에 대한 식별자, 신호 이름 및 신호 데이터를 지정하는 Amazon SWF(SignalWorkflowExecution 작업을 사용하거나 결정자의 경우 SignalExternalWorkflowExecution 결정을 사용)를 직접적으로 호출합니다. 그런 다음 Amazon SWF는 신호를 수신하여 대상 워크플로 실행 기록에 기록하고 이에 대한 결정 작업을 예약합니다. 결정자가 결정 작업을 수신하면 워크플로 실행 내역 내에서도 해당 신호를 수신합니다. 그런 다음 결정자는 신호 및 신호의 데이터를 기반으로 적절한 작업을 수행할 수 있습니다.

신호를 기다려야 하는 경우가 있습니다. 예를 들어, 사용자는 신호를 보내 주문을 취소할 수 있지만 주문 후 1시간 이내에만 주문을 취소할 수 있습니다. Amazon SWF에는 결정자가 서비스의 신호를 기다릴 수 있는 기본 요소가 없습니다. 결정자 자체에서 일시 중지 기능을 구현해야 합니다. 일시 중지하려면 결정자가 StartTimer 결정을 사용해 타이머를 시작해야 합니다. 결정자는 결정 작업을 계속 폴링하면서 이 타이머에 지정된 기간 동안 신호를 기다립니다. 결정 작업을 받은 결정자는 내역을 확인해 신호가 수신되었는지 아니면 타이머가 만료되었는지 확인해야 합니다. 신호가 수신되었다면 결정자는 타이머를 취소해야 합니다. 그렇지 않고 타이머가 만료되었다면 지정된 시간 안에 신호가 도착하지 않았다는 뜻입니다. 요약하자면, 특정 신호를 기다리려면 다음과 같이 합니다.

  1. 결정자가 기다려야 하는 시간 길이에 해당하는 타이머를 생성합니다.

  2. 결정 작업을 받으면 내역을 확인해 신호가 수신되었는지 아니면 타이머가 만료되었는지 확인합니다.

  3. 신호가 수신되면 CancelTimer 결정을 사용해 타이머를 취소하고 신호를 처리합니다. 타이밍에 따라 내역에 TimerFiredWorkflowExecutionSignaled 이벤트가 둘 다 포함될 수 있습니다. 이러한 경우 내역에 표시된 이벤트의 상대적 순서에 따라 무엇이 먼저 발생했는지 확인할 수 있습니다.

  4. 신호가 수신되기 전에 타이머가 만료되었다면 신호를 기다리던 결정자는 시간 초과됩니다. 실행에 실패하거나 사용 사례에 적합한 다른 로직은 무엇이든 수행할 수 있습니다.

워크플로를 취소해야 하는 경우(예: 고객이 주문 자체를 취소한 경우) 워크플로에 신호를 보내는 대신 RequestCancelWorkflowExecution 작업을 사용해야 합니다.

몇 가지 신호 적용 사례는 다음과 같습니다.

  • 신호가 수신될 때까지 워크플로 실행의 진행을 일시 중지합니다(예: 재고 선적 대기).

  • 결정자의 의사 결정 방식에 영향을 줄 수 있는 정보를 워크플로 실행에 제공합니다. 이것은 외부 이벤트의 영향을 받는 워크플로일 때 유용합니다(예: 폐점 후 재고 판매 종료).

  • 변경이 예측되는 경우 워크플로 실행을 업데이트합니다(예: 주문 후 선적 이전에 주문 수량 변경).

다음 예에서는 워크플로 실행으로 주문 취소 신호가 전송됩니다.

https://swf.us-east-1.amazonaws.com SignalWorkflowExecution {"domain": "867530901", "workflowId": "20110927-T-1", "runId": "f5ebbac6-941c-4342-ad69-dfd2f8be6689", "signalName": "CancelOrder", "input": "order 3553"}

워크플로 실행이 신호를 수신하면 Amazon SWF는 다음과 유사한 성공적인 HTTP 응답을 반환합니다. Amazon SWF는 결정 작업을 생성하여 결정자에게 신호를 처리하도록 알립니다.

HTTP/1.1 200 OK Content-Length: 0 Content-Type: application/json x-amzn-RequestId: bf78ae15-3f0c-11e1-9914-a356b6ea8bdf