Implementazione della scelta esclusiva con Amazon Simple Workflow - Amazon Simple Workflow Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementazione della scelta esclusiva con Amazon Simple Workflow

In alcuni scenari, è possibile che tu intenda pianificare un set di attività differente in funzione del risultato di un'attività precedente. Il modello di scelta esclusiva ti consente di creare flussi di lavoro flessibili che soddisfano i requisiti complessi della tua applicazione.

Amazon Simple Workflow Service (Amazon SWF) non include un'operazione specifica per la scelta esclusiva. Per utilizzare una scelta esclusiva, è sufficiente scrivere la logica del decisore per prendere decisioni differenti in funzione dei risultati dell'attività precedente. Di seguito sono elencati alcuni casi di utilizzo della scelta esclusiva:

  • Esecuzione di attività di pulizia se i risultati dell'attività precedente si sono rivelati insoddisfacenti.

  • Pianificazione di attività differenti a seconda che il cliente ha acquistato un piano di base o avanzato.

  • Esecuzione di differenti attività di autenticazione a seconda dello storico ordini del cliente.

Nell'esempio di e-commerce, potresti utilizzare la scelta esclusiva per spedire o annullare un ordine in base al risultato dell'addebito della carta di credito. Nella figura seguente, il decisore pianifica i task di attività relativi alla spedizione dell'ordine e alla registrazione del completamento dello stesso se l'addebito della carta di credito viene completato. In caso contrario, pianifica i task di attività relativi alla cancellazione dell'ordine e all'invio di e-mail al cliente.

Diagramma del flusso di lavoro per un ordine cliente

Il decisore pianifica l'attività ShipOrder se l'addebito della carta di credito viene eseguito senza problemi. In caso contrario, il decisore pianifica l'attività CancelOrder.

In questo caso, programma il decisore affinché interpreti lo storico e determini se la carta di credito è stata addebitata senza problemi. A tale scopo, potresti utilizzare una logica simile alla seguente:

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

Se l'addebito della carta di credito riesce, il decisore deve rispondere con RespondDecisionTaskCompleted per pianificare l'attività 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" } } ] }

Se l'addebito della carta di credito non riesce, il decisore deve rispondere con RespondDecisionTaskCompleted per pianificare l'attività 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" } } ] }

Se Amazon SWF è in grado di convalidare i dati nelRespondDecisionTaskCompletedaction, Amazon SWF restituisce una risposta HTTP positiva simile a quella illustrata di seguito.

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