Aplikasi HelloWorldWorkflowDistributed - AWS Flow Framework untuk Java

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Aplikasi HelloWorldWorkflowDistributed

Dengan HelloWorldWorkflow dan HelloWorldWorkflowAsync, Amazon SWF menengahi interaksi antara alur kerja dan implementasi aktivitas, tetapi mereka berjalan secara lokal sebagai proses tunggal. GreeterMain berada dalam proses terpisah, namun masih berjalan pada sistem yang sama.

Sebuah fitur kunci dari Amazon SWF adalah hal itu mendukung aplikasi didistribusikan. Misalnya, Anda dapat menjalankan pekerja alur kerja pada instans Amazon EC2, alur kerja starter pada komputer pusat data, dan aktivitas pada komputer desktop klien. Anda bahkan dapat menjalankan aktivitas yang berbeda pada sistem yang berbeda.

Aplikasi HelloWorldWorkflowDistributed memperluas HelloWorldWorkflowAsync untuk mendistribusikan aplikasi di dua sistem dan tiga proses.

  • Alur kerja dan starter alur kerja berjalan sebagai proses terpisah pada satu sistem.

  • Aktivitas berjalan pada sistem yang terpisah.

Untuk menerapkan aplikasi, membuat salinan paket helloWorld.HelloWorldWorkflowAsync dalam direktori proyek Anda dan menamainya helloWorld.HelloWorldWorkflowDistributed. Bagian berikut menjelaskan cara memodifikasi kode HelloWorldWorkflowAsync asli untuk mendistribusikan aplikasi di dua sistem dan tiga proses.

Anda tidak perlu mengubah implementasi alur kerja atau aktivitas untuk menjalankannya pada sistem yang terpisah, bahkan nomor versi tersebut. Anda juga tidak perlu memodifikasi GreeterMain. Yang perlu Anda ubah adalah host aktivitas dan alur kerja.

Dengan HelloWorldWorkflowAsync, satu aplikasi berfungsi sebagai host alur kerja dan aktivitas. Untuk menjalankan implementasi alur kerja dan aktivitas pada sistem terpisah, Anda harus menerapkan aplikasi terpisah. Hapus GreeterWorker dari proyek dan menambahkan dua file kelas baru, GreeterWorkflowWorker dan GreeterActivitiesWorker.

HelloWorldWorkflowDistributed mengimplementasikan host aktivitas di GreeterActivitiesWorker, sebagai berikut:

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 mengimplementasikan host alur kerja diGreeterWorkflowWorker, sebagai berikut:

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

Catatan bahwa GreeterActivitiesWorker hanya GreeterWorker tanpa kode WorkflowWorker dan GreeterWorkflowWorker hanya GreeterWorker tanpa kode ActivityWorker.

Untuk menjalankan alur kerja:
  1. Buat file JAR yang dapat dijalankan dengan GreeterActivitiesWorker sebagai titik masuk.

  2. Salin file JAR dari Langkah 1 ke sistem lain, yang dapat menjalankan sistem operasi yang mendukung Java.

  3. Pastikan kredensial AWS dengan akses ke domain Amazon SWF yang sama dibuat tersedia pada sistem lain.

  4. Jalankan file JAR.

  5. Pada sistem pengembangan Anda, gunakan Eclipse untuk menjalankan GreeterWorkflowWorker dan GreeterMain.

Selain fakta bahwa aktivitas berjalan pada sistem yang berbeda dari pekerja alur kerja dan starter alur kerja, alur kerja bekerja dengan cara yang sama persis seperti HelloWorldAsync. Namun, karena println memanggil yang mencetak “Hello World!” ke konsol tersebut adalah di aktivitas say, output akan muncul pada sistem yang menjalankan pekerja aktivitas.