Implementazione di attività - AWS Flow Framework per Java

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 di attività

Le attività vengono implementate fornendo un'implementazione dell'interfaccia @Activities. LaAWS Flow Frameworkper Java utilizza le istanze di implementazione di attività configurate sul lavoratore per elaborare task di attività in fase di runtime. Il lavoratore trova automaticamente l'implementazione di attività del tipo corretto.

Puoi utilizzare proprietà e campi per trasferire le risorse alle istanze di attività, ad esempio le connessioni del database. Poiché si può accedere all'oggetto di implementazione da più thread, le risorse condivise devono essere protette dai thread.

Ricorda che l'implementazione di attività non accetta parametri di tipo Promise<> e non restituisce oggetti di quel tipo. Questo perché l'implementazione di attività non deve dipendere dal modo in cui è stata invocata (sincrono o asincrono).

L'interfaccia delle attività mostrata in precedenza può essere implementata in questo modo:

public class MyActivitiesImpl implements MyActivities { @Override @ManualActivityCompletion public int activity1(){ //implementation } @Override public void activity2(int foo){ //implementation } }

L'attività di implementazione ha a disposizione un contesto locale di thread per recuperare l'oggetto del task, l'oggetto del convertitore di dati in uso ecc. Si può accedere al contesto attuale tramite ActivityExecutionContextProvider.getActivityExecutionContext(). Per maggiori dettagli, consulta la documentazione AWS SDK for Java per ActivityExecutionContext e la sezione Contesto di esecuzione.

Completamento manuale della attività

L'annotazione @ManualActivityCompletion nell'esempio precedente è opzionale. È consentita solo sui metodi che implementano un'attività e viene utilizzata per configurare l'attività perché non sia completata automaticamente in fase di restituzione del metodo di attività. Ciò potrebbe essere utile quando si desidera completare l'attività in modo asincrono, ad esempio manualmente dopo che un'azione umana è stata completata.

Per impostazione predefinita, il framework considera l'attività completata alla fase di restituzione del metodo di attività. Ciò significa che il lavoratore di attività segnala il completamento del task di attività ad Amazon SWF e i risultati (se ce ne sono) a. Tuttavia, ci sono casi d'uso in cui non è consigliabile che il task di attività sia indicato come completato in questa fase. Questo è particolarmente utile quando stai modellando task umani. Ad esempio, il metodo di attività può inviare una e-mail alla persona che deve completare una parte del lavoro prima del completamento del task di attività. In questi casi, puoi annotare il metodo di attività con @ManualActivityCompletion per comunicare al lavoratore di attività che non la deve completare automaticamente. Per completarla manualmente, puoi usare ilManualActivityCompletionClientfornito nel quadro o utilizzare ilRespondActivityTaskCompletedmetodo sul client Java Amazon SWF fornito in Amazon SWF SDK. Per ulteriori dettagli, consulta la documentazione di AWS SDK for Java.

Per completare il task di attività, devi fornire un token del task. Il token del task è utilizzato da Amazon SWF per identificare i task in modo univoco. Puoi accedere al token dal ActivityExecutionContext nell'implementazione di attività. Devi trasferire il token alla parte responsabile del completamento del task. Il token può essere recuperato dal ActivityExecutionContext chiamando ActivityExecutionContextProvider.getActivityExecutionContext().getTaskToken().

L'attività getName dell'esempio di Hello World può essere implementata per inviare un'e-mail in cui si chiede a qualcuno di esprimere un messaggio di saluto:

@ManualActivityCompletion @Override public String getName() throws InterruptedException { ActivityExecutionContext executionContext = contextProvider.getActivityExecutionContext(); String taskToken = executionContext.getTaskToken(); sendEmail("abc@xyz.com", "Please provide a name for the greeting message and close task with token: " + taskToken); return "This will not be returned to the caller"; }

Si può utilizzare il seguente frammento di codice per il saluto e chiudere il task utilizzando il ManualActivityCompletionClient. In alternativa, il task può anche non andare a buon fine:

public class CompleteActivityTask { public void completeGetNameActivity(String taskToken) { AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(...); // use AWS access keys ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient); ManualActivityCompletionClient manualCompletionClient = manualCompletionClientFactory.getClient(taskToken); String result = "Hello World!"; manualCompletionClient.complete(result); } public void failGetNameActivity(String taskToken, Throwable failure) { AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(...); // use AWS access keys ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient); ManualActivityCompletionClient manualCompletionClient = manualCompletionClientFactory.getClient(taskToken); manualCompletionClient.fail(failure); } }