Applicazione HelloWorldWorkflowDistributed - 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à.

Applicazione HelloWorldWorkflowDistributed

Con HelloWorldWorkflow e HelloWorldWorkflowAsync, Amazon SWF media l'interazione tra il flusso di lavoro e le implementazioni delle attività, ma queste operano localmente come un singolo processo.GreeterMainè in un processo separato, ma funziona ancora sullo stesso sistema.

Una funzione chiave di Amazon SWF è il supporto di applicazioni distribuite. Ad esempio, puoi eseguire il lavoratore del flusso di lavoro su un'istanza Amazon EC2, lo starter su un computer datacenter e le attività su un computer desktop client. Puoi anche eseguire attività diverse su sistemi diversi.

L'applicazione HelloWorldWorkflowDistributed estende HelloWorldWorkflowAsync per distribuire l'applicazione in due sistemi e tre processi.

  • Il flusso di lavoro e lo starter operano come processi separati su un solo sistema.

  • Le attività operano su un sistema separato.

Per implementare l'applicazione, crea una copia del pacchetto helloWorld.HelloWorldWorkflowAsync nella tua directory di progetto e denominala helloWorld.HelloWorldWorkflowDistributed. Le seguenti sezioni descrivono come modificare il codice originale HelloWorldWorkflowAsync per distribuire l'applicazione in due sistemi e tre processi.

Non devi modificare il flusso di lavoro o le implementazioni di attività per eseguirli su sistemi separati, e neanche i numeri di versione. Non devi neanche modificare GreeterMain. Tutto quello che devi cambiare è l'host delle attività e del flusso di lavoro.

Con HelloWorldWorkflowAsync, una sola applicazione funziona da host di attività e del flusso di lavoro. Per eseguire su sistemi separati il flusso di lavoro e le implementazioni delle attività, devi implementare applicazioni separate. Elimina GreeterWorker dal progetto e aggiungi due nuovi file di classe, GreeterWorkflowWorker e GreeterActivitiesWorker.

HelloWorldWorkflowDistributed implementa il suo host di attività in GreeterActivitiesWorker, nel modo seguente:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.ActivityWorker; public class GreeterActivitiesWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); } }

HelloWorldWorkflowDistributed implementa il suo host del flusso di lavoro in GreeterWorkflowWorker, nel modo seguente:

import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow; import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient; import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker; public class GreeterWorkflowWorker { public static void main(String[] args) throws Exception { ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000); String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID"); String swfSecretKey = System.getenv("AWS_SECRET_KEY"); AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey); AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config); service.setEndpoint("https://swf.us-east-1.amazonaws.com"); String domain = "helloWorldExamples"; String taskListToPoll = "HelloWorldAsyncList"; WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll); wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class); wfw.start(); } }

Ricorda che GreeterActivitiesWorker è solo GreeterWorker senza il codice WorkflowWorker e che GreeterWorkflowWorker è solo GreeterWorker senza il codice ActivityWorker.

Per eseguire il flusso di lavoro:
  1. Crea un file JAR eseguibile con GreeterActivitiesWorker come punto di ingresso.

  2. Copia il file JAR della Fase 1 su un altro sistema, che abbia qualsiasi sistema operativo che supporta Java.

  3. Verifica cheAWSsull'altro sistema sono disponibili le credenziali con l'accesso allo stesso dominio Amazon SWF.

  4. Esegui il file JAR.

  5. Nel sistema di sviluppo, utilizza Eclipse per eseguire GreeterWorkflowWorker e GreeterMain.

A parte il fatto che le attività vengono eseguite su un sistema diverso rispetto al lavoratore e allo starter, il flusso di lavoro funziona esattamente come HelloWorldAsync. Tuttavia, perchéprintlnchiama che stampa «Hello World!» alla console è nellasayattività, l'output comparirà sul sistema che esegue il lavoratore delle attività.