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:
-
Crea un file JAR eseguibile con
GreeterActivitiesWorker
come punto di ingresso. -
Copia il file JAR della Fase 1 su un altro sistema, che abbia qualsiasi sistema operativo che supporta Java.
-
Verifica cheAWSsull'altro sistema sono disponibili le credenziali con l'accesso allo stesso dominio Amazon SWF.
-
Esegui il file JAR.
-
Nel sistema di sviluppo, utilizza Eclipse per eseguire
GreeterWorkflowWorker
eGreeterMain
.
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éprintln
chiama che stampa «Hello World!» alla console è nellasay
attività, l'output comparirà sul sistema che esegue il lavoratore delle attività.