Aplikasi HelloWorldWorkflowParallel - 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 HelloWorldWorkflowParallel

Versi sebelumnya dari Hello World! semua menggunakan topologi alur kerja linear. Namun, Amazon SWF tidak terbatas pada topologi linier. Aplikasi HelloWorldWorkflowParallel adalah versi modifikasi dari HelloWorldWorkflow yang menggunakan topologi paralel, seperti yang ditunjukkan pada gambar berikut.

Topologi alur kerja HelloWorldWorkflowParallel

Dengan HelloWorldWorkflowParallel, getName dan getGreeting berjalan secara paralel dan masing-masing kembali bagian dari ucapan. say kemudian menggabungkan dua string ke dalam ucapan, dan mencetaknya ke konsol tersebut.

Untuk menerapkan aplikasi, membuat salinan paket helloWorld.HelloWorldWorkflow dalam direktori proyek Anda dan menamakannya helloWorld.HelloWorldWorkflowParallel. Bagian berikut menjelaskan cara memodifikasi kode HelloWorldWorkflow asli untuk menjalankan getName dan getGreeting secara paralel.

HelloWorldWorkflowParallel Pekerja Aktivitas

Antarmuka aktivitas HelloWorldWorkflowParallel diimplementasikan di GreeterActivities, seperti yang ditunjukkan dalam contoh berikut.

import com.amazonaws.services.simpleworkflow.flow.annotations.Activities; import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions; @Activities(version="5.0") @ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 10) public interface GreeterActivities { public String getName(); public String getGreeting(); public void say(String greeting, String name); }

Antarmuka mirip dengan HelloWorldWorkflow, dengan pengecualian berikut:

  • getGreeting tidak mengambil masukan apapun; itu hanya mengembalikan string ucapan.

  • say mengambil dua string masukan, ucapan dan nama.

  • Antarmuka memiliki nomor versi baru, yang diperlukan setiap saat Anda mengubah antarmuka yang terdaftar.

HelloWorldWorkflowParallel mengimplementasikan aktivitas di GreeterActivitiesImpl, sebagai berikut:

public class GreeterActivitiesImpl implements GreeterActivities { @Override public String getName() { return "World!"; } @Override public String getGreeting() { return "Hello "; } @Override public void say(String greeting, String name) { System.out.println(greeting + name); } }

getName dan getGreeting sekarang hanya mengembalikan setengah dari string ucapan. say menggabungkan dua bagian untuk menghasilkan frase lengkap, dan mencetak ke konsol tersebut.

Pekerja alur kerja HelloWorldWorkflowParallel

Antarmuka alur kerja HelloWorldWorkflowParallel diimplementasikan dalam GreeterWorkflow sebagai berikut:

import com.amazonaws.services.simpleworkflow.flow.annotations.Execute; import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow; import com.amazonaws.services.simpleworkflow.flow.annotations.WorkflowRegistrationOptions; @Workflow @WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600) public interface GreeterWorkflow { @Execute(version = "5.0") public void greet(); }

Kelas identik dengan versi HelloWorldWorkflow, kecuali bahwa nomor versi telah diubah untuk mencocokkan pekerja aktivitas.

Alur kerja diimplementasikan dalam GreeterWorkflowImpl, sebagai berikut:

import com.amazonaws.services.simpleworkflow.flow.core.Promise; public class GreeterWorkflowImpl implements GreeterWorkflow { private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl(); public void greet() { Promise<String> name = operations.getName(); Promise<String> greeting = operations.getGreeting(); operations.say(greeting, name); } }

Sekilas, implementasi ini terlihat sangat mirip dengan HelloWorldWorkflow; tiga aktivitas yang dieksekusi metode klien secara berurutan. Namun, aktivitas tidak.

  • HelloWorldWorkflow diteruskan name ke getGreeting. Karena name adalah objek Promise<T>, getGreeting ditangguhkan melaksanakan aktivitas sampai getName selesai, sehingga dua aktivitas dilaksanakan secara berurutan.

  • HelloWorldWorkflowParallel tidak memberikan masukan getName atau getGreeting. Tidak ada metode yang menunda eksekusi dan metode aktivitas terkait dieksekusi segera, secara paralel.

Aktivitas say mengambil greeting dan name sebagai parameter input. Karena mereka adalah objek Promise<T>, say yang menunda eksekusi sampai kedua aktivitas selesai, dan kemudian membangun dan mencetak ucapan.

Perhatikan bahwa HelloWorldWorkflowParallel tidak menggunakan kode pemodelan khusus untuk menentukan topologi alur kerja. Itu tidak secara implisit dengan menggunakan standar kontrol aliran Java dan mengambil keuntungan dari properti objek Promise<T>. AWS Flow Framework untuk aplikasi Java dapat menerapkan topologi bahkan kompleks hanya dengan menggunakan objek Promise<T> dalam hubungannya dengan konstruksi aliran kontrol Java konvensional.

Alur Kerja HelloWorldWorkflowParallel dan Host Aktivitas dan Starter

HelloWorldWorkflowParallel menerapkan GreeterWorker sebagai kelas host untuk implementasi alur kerja dan aktivitas. Hal ini identik dengan implementasi HelloWorldWorkflow kecuali untuk nama taskListToPoll, yang diatur ke “HelloWorldParallelList”.

HelloWorldWorkflowParallel mengimplementasikan starter alur kerja di GreeterMain, dan itu identik dengan implementasi HelloWorldWorkflow.

Untuk menjalankan alur kerja, jalankan GreeterWorker dan GreeterMain, seperti dengan HelloWorldWorkflow.