Flussi di lavoro continui - 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à.

Flussi di lavoro continui

In alcuni casi d'uso, può servire un flusso di lavoro di durata lunga o eterna, ad esempio uno che monitori l'integrità di una flotta di server.

Nota

Poiché Amazon SWF conserva l'intera cronologia di un'esecuzione del flusso di lavoro, la cronologia continua a crescere nel tempo. Il framework recupera la cronologia da Amazon SWF quando esegue una riproduzione; questo può diventare costoso se le dimensioni della cronologia sono troppo grandi. Nei flussi di lavoro di lunga durata o continui, devi chiudere periodicamente l'esecuzione in corso e avviarne una nuova per poter proseguire.

Questo è un proseguimento logico dell'esecuzione del flusso di lavoro. A questo scopo si può usare un self client generato. Nell'implementazione del flusso di lavoro, basta chiamare il metodo @Execute sul self client. Una volta completata l'esecuzione corrente, il framework avvia una nuova esecuzione utilizzando lo stesso ID del flusso di lavoro.

Puoi anche proseguire l'esecuzione chiamando il metodo continueAsNewOnCompletion nel GenericWorkflowClient che puoi recuperare dal DecisionContext corrente. Ad esempio, la seguente implementazione del flusso di lavoro imposta un timer perché si attivi dopo un giorno e chiama il suo punto di ingresso per avviare una nuova esecuzione.

public class ContinueAsNewWorkflowImpl implements ContinueAsNewWorkflow { private DecisionContextProvider contextProvider = new DecisionContextProviderImpl(); private ContinueAsNewWorkflowSelfClient selfClient = new ContinueAsNewWorkflowSelfClientImpl(); private WorkflowClock clock = contextProvider.getDecisionContext().getWorkflowClock(); @Override public void startWorkflow() { Promise<Void> timer = clock.createTimer(86400); continueAsNew(timer); } @Asynchronous void continueAsNew(Promise<Void> timer) { selfClient.startWorkflow(); } }

Quando un flusso di lavoro si chiama ricorsivamente, il framework chiude il flusso di lavoro in corso al completamento dei task in sospeso e avvia una nuova esecuzione. Ricorda che fino a quando ci sono task in sospeso, l'esecuzione corrente non può essere chiusa. La nuova esecuzione non eredita automaticamente la cronologia o i dati da quella originale; se vuoi esportare qualche stato sulla nuova esecuzione, dovrai trasferirlo esplicitamente come input.