Application HelloWorldWorkflowDistributed - AWS Flow Framework pour Java

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Application HelloWorldWorkflowDistributed

Avec HelloWorldWorkflow et HelloWorldWorkflowAsync, Amazon SWF assure la médiation de l'interaction entre les implémentations des applications de travail et des activités, mais elles s'exécutent localement comme un seul processus.GreeterMainest dans un processus distinct, mais il fonctionne toujours sur le même système.

Une fonction clé d'Amazon SWF est sa prise en charge des applications distribuées. Par exemple, vous pouvez exécuter l'application de travail du flux de travail sur une instance Amazon EC2, le démarreur du flux de travail sur un ordinateur du centre de données et les activités sur un ordinateur de bureau client. Vous pouvez même exécuter différentes activités sur différent systèmes.

L'application HelloWorldWorkflowDistributed étend HelloWorldWorkflowAsync pour distribuer l'application sur deux systèmes et trois processus.

  • Le flux de travail et le démarreur de flux de travail s'exécutent en tant que processus distincts sur un système.

  • Les activités s'exécutent sur un système distinct.

Pour implémenter l'application, créez une copie du package helloWorld.HelloWorldWorkflowAsync dans le répertoire de votre projet et nommez celle-ci helloWorld.HelloWorldWorkflowDistributed. Les sections suivantes expliquent comment modifier le code HelloWorldWorkflowAsync initial pour distribuer l'application sur deux systèmes et trois processus.

Vous n'avez pas besoin de modifier les implémentations de flux de travail ou d'activités pour les exécuter sur des systèmes distincts, même pas les numéros de version. Vous n'avez pas non plus besoin de modifier GreeterMain. Vous devez uniquement modifier l'hôte d'activités et de flux de travail.

Avec HelloWorldWorkflowAsync, une application unique tient lieu d'hôte d'activités et de flux de travail. Pour exécuter les implémentations de flux de travail et d'activité sur des systèmes distincts, vous devez implémenter des applications distinctes. Supprimez GreeterWorker du projet et ajoutez deux nouveaux fichiers de classe, GreeterWorkflowWorker et GreeterActivitiesWorker.

HelloWorldWorkflowDistributed implémente son hôte d'activités dans GreeterActivitiesWorker, comme suit :

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 implémente son hôte de flux de travail dans GreeterWorkflowWorker, comme suit :

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(); } }

Notez que GreeterActivitiesWorker est seulement GreeterWorker sans le code WorkflowWorker et que GreeterWorkflowWorker est seulement GreeterWorker sans le code ActivityWorker.

Pour exécuter le flux de travail :
  1. Créez un fichier JAR exécutable avec GreeterActivitiesWorker comme point d'entrée.

  2. Copiez le fichier JAR de l'étape 1 vers un autre système, qui peut exécuter tout système d'exploitation prenant en charge Java.

  3. Assurez-vous queAWSDes informations d'identification avec l'accès au même domaine Amazon SWF sont disponibles sur l'autre système.

  4. Exécutez le fichier JAR.

  5. Sur votre système de développement, utilisez Eclipse pour exécuter GreeterWorkflowWorker et GreeterMain.

À par le fait que les activités s'exécutent sur un autre système que l'exécuteur de flux de travail et le démarreur de flux de travail, le flux de travail fonctionne exactement comme HelloWorldAsync. Cependant, parce queprintlnTâche « Hello World ! » pour sur la console se trouve dans lesay, la sortie apparaît sur le système qui exécute l'application de travail des activités.