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.
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
kegetGreeting
. Karenaname
adalah objekPromise<T>
,getGreeting
ditangguhkan melaksanakan aktivitas sampaigetName
selesai, sehingga dua aktivitas dilaksanakan secara berurutan. -
HelloWorldWorkflowParallel tidak memberikan masukan
getName
ataugetGreeting
. 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
.