HelloWorldWorkflow Aplikasi - 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.

HelloWorldWorkflow Aplikasi

Meskipun HelloWorldcontoh dasarnya terstruktur seperti alur kerja, ini berbeda dari alur kerja Amazon SWF dalam beberapa hal utama:

Aplikasi Alur Kerja konvensional dan Amazon SWF
HelloWorld Alur Kerja Amazon SWF
Jalankan secara lokal sebagai proses tunggal. Jalankan sebagai beberapa proses yang dapat didistribusikan di beberapa sistem, termasuk instans Amazon EC2, pusat data privat, komputer klien, dan sebagainya. Mereka bahkan tidak perlu menjalankan sistem operasi yang sama.
Aktivitas adalah metode sinkron, yang memblok sampai mereka selesai. Aktivitas diwakili oleh metode asinkron, yang kembali segera dan mengizinkan alur kerja untuk melakukan tugas-tugas lain sambil menunggu untuk aktivitas selesai.
Pekerja alur kerja berinteraksi dengan pekerja aktivitas dengan memanggil metode yang sesuai. pekerja alur kerja berinteraksi dengan pekerja aktivitas dengan menggunakan permintaan HTTP, dengan Amazon SWF bertindak sebagai perantara.
Alur kerja starter berinteraksi dengan pekerja alur kerja dengan memanggil metode yang sesuai. Alur kerja starter berinteraksi dengan pekerja alur kerja dengan menggunakan permintaan HTTP, dengan Amazon SWF bertindak sebagai perantara.

Anda dapat menerapkan aplikasi alur kerja asinkron terdistribusi dari scratch, misalnya, dengan meminta pekerja alur kerja Anda berinteraksi dengan pekerja aktivitas secara langsung melalui panggilan layanan web. Namun, Anda kemudian harus menerapkan semua kode rumit yang diperlukan untuk mengelola eksekusi asinkron beberapa aktivitas, menangani aliran data, dan sebagainya. AWS Flow Framework Untuk Java dan Amazon SWF mengurus semua detail itu, yang memungkinkan Anda untuk fokus pada penerapan logika bisnis.

HelloWorldWorkflow adalah versi modifikasi HelloWorld yang berjalan sebagai alur kerja Amazon SWF. Gambar berikut merangkum bagaimana dua aplikasi bekerja.

Versi konvensional dan Amazon SWF dari Hello World!

HelloWorld berjalan sebagai proses tunggal dan starter, pekerja alur kerja, dan pekerja aktivitas berinteraksi dengan menggunakan panggilan metode konvensional. Dengan HelloWorldWorkflow, starter, pekerja alur kerja, dan pekerja aktivitas mendistribusikan komponen yang berinteraksi melalui Amazon SWF dengan menggunakan permintaan HTTP. Amazon SWF mengelola interaksi dengan mempertahankan daftar alur kerja dan tugas aktivitas, yang dikirim ke komponen masing-masing. Bagian ini menjelaskan cara kerja kerangka kerja HelloWorldWorkflow.

HelloWorldWorkflow diimplementasikan dengan menggunakan AWS Flow Framework for Java API, yang menangani detail terkadang rumit berinteraksi dengan Amazon SWF di latar belakang dan menyederhanakan proses pengembangan secara signifikan. Anda dapat menggunakan proyek yang sama dengan yang Anda lakukan HelloWorld, yang sudah dikonfigurasi AWS Flow Framework untuk aplikasi Java. Namun, untuk menjalankan aplikasi, Anda harus membuat akun Amazon SWF, sebagai berikut:

  • Mendaftar untuk AWS akun, jika Anda belum memilikinya, di Amazon Web Services.

  • Menetapkan ID akses akun Anda dan ID rahasia ke variabel lingkungan AWS_ACCESS_KEY_ID dan AWS_SECRET_KEY, masing-masing. Ini adalah praktik yang baik untuk tidak mengekspos nilai-nilai kunci literal dalam kode Anda. Menyimpannya dalam variabel lingkungan adalah cara yang mudah untuk menangani masalah ini.

  • Mendaftar untuk akun Amazon SWF di Amazon Simple Workflow Service.

  • Masuk ke AWS Management Console dan pilih layanan Amazon SWF.

  • Pilih Manage Domains (Mengelola Domain) di pojok kanan atas dan daftarkan domain Amazon SWF baru. domain adalah kontainer logis untuk sumber daya aplikasi Anda, seperti alur kerja dan aktivitas jenis, dan eksekusi alur kerja. Anda dapat menggunakan nama domain yang nyaman, tetapi penelusurannya menggunakan "”. helloWorldWalkthrough

Untuk mengimplementasikan HelloWorldWorkflow, buat salinan HelloWorld. HelloWorld paket di direktori proyek Anda dan beri nama HelloWorld. HelloWorldWorkflow. Bagian berikut menjelaskan cara memodifikasi HelloWorld kode asli untuk menggunakan AWS Flow Framework untuk Java dan dijalankan sebagai aplikasi alur kerja Amazon SWF.

HelloWorldWorkflow Aktivitas Pekerja

HelloWorld melaksanakan kegiatannya pekerja sebagai satu kelas. Pekerja AWS Flow Framework untuk aktivitas Java memiliki tiga komponen dasar:

  • Metode aktivitas—yang melakukan tugas yang sebenarnya — didefinisikan dalam sebuah antarmuka dan diimplementasikan dalam kelas terkait.

  • ActivityWorkerKelas mengelola interaksi antara metode aktivitas dan Amazon SWF.

  • Aplikasi host aktivitas mendaftar dan memulai pekerja aktivitas, dan menangani pembersihan.

Bagian ini membahas metode aktivitas; dua kelas lainnya dibahas kemudian.

HelloWorldWorkflow mendefinisikan antarmuka aktivitas diGreeterActivities, sebagai berikut:

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

Antarmuka ini tidak sepenuhnya diperlukan untuk HelloWorld, tetapi untuk aplikasi AWS Flow Framework untuk Java. Perhatikan bahwa definisi antarmuka itu sendiri tidak berubah. Namun, Anda harus menerapkan dua AWS Flow Framework untuk anotasi Java, @ActivityRegistrationOptions dan@Activities, ke definisi antarmuka. Anotasi menyediakan informasi konfigurasi dan mengarahkan prosesor anotasi Java AWS Flow Framework untuk menggunakan definisi antarmuka untuk menghasilkan kelas klien aktivitas, yang akan dibahas nanti.

@ActivityRegistrationOptionsmemiliki beberapa nilai bernama yang digunakan untuk mengkonfigurasi perilaku aktivitas. HelloWorldWorkflow menentukan dua batas waktu:

  • defaultTaskScheduleToStartTimeoutSeconds menentukan berapa lama tugas dapat antrean dalam daftar tugas aktivitas, dan diatur ke 300 detik (5 menit).

  • defaultTaskStartToCloseTimeoutSeconds menentukan waktu maksimum aktivitas dapat mengambil untuk melakukan tugas dan diatur ke 10 detik.

Batas waktu ini memastikan bahwa aktivitas menyelesaikan tugasnya dalam jumlah waktu yang wajar. Jika batas waktu terlampaui, kerangka kerja menghasilkan kesalahan dan pekerja alur kerja harus memutuskan bagaimana menangani masalah. Untuk diskusi tentang cara menangani kesalahan tersebut, lihat Penanganan Kesalahan.

@Activities memiliki beberapa nilai, tetapi biasanya hanya menentukan nomor versi aktivitas, yang mengizinkan Anda untuk melacak generasi yang berbeda dari implementasi aktivitas. Jika Anda mengubah antarmuka aktivitas setelah Anda mendaftarkannya dengan Amazon SWF, termasuk mengubah nilai-nilai @ActivityRegistrationOptions, Anda harus menggunakan nomor versi baru.

HelloWorldWorkflow mengimplementasikan metode aktivitas diGreeterActivitiesImpl, sebagai berikut:

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

Perhatikan bahwa kode identik dengan HelloWorld implementasi. Pada intinya, AWS Flow Framework aktivitas hanyalah metode yang mengeksekusi beberapa kode dan mungkin mengembalikan hasilnya. Perbedaan antara aplikasi standar dan aplikasi alur kerja Amazon SWF terletak pada bagaimana alur kerja mengeksekusi aktivitas, di mana aktivitas mengeksekusi, dan bagaimana hasilnya dikembalikan ke pekerja alur kerja.

HelloWorldWorkflow Pekerja Alur Kerja

Seorang pekerja alur kerja Amazon SWF memiliki tiga komponen dasar.

  • implementasi alur kerja, yang merupakan kelas yang melakukan tugas-tugas yang berhubungan dengan alur kerja.

  • Kelas Aktivitas klien, yang pada dasarnya sebuah proksi untuk kelas aktivitas dan digunakan oleh implementasi alur kerja untuk mengeksekusi metode aktivitas secara asinkron.

  • WorkflowWorkerKelas, yang mengelola interaksi antara alur kerja dan Amazon SWF.

Bagian ini membahas implementasi alur kerja dan aktivitas klien; kelas WorkflowWorker dibahas nanti.

HelloWorldWorkflow mendefinisikan antarmuka alur kerja diGreeterWorkflow, 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 = "1.0") public void greet(); }

Antarmuka ini juga tidak sepenuhnya diperlukan untuk HelloWorld tetapi sangat penting untuk aplikasi AWS Flow Framework untuk Java. Anda harus menerapkan dua AWS Flow Framework untuk anotasi Java, @Workflow dan@WorkflowRegistrationOptions, ke definisi antarmuka alur kerja. Anotasi menyediakan informasi konfigurasi dan juga mengarahkan prosesor anotasi AWS Flow Framework untuk Java untuk menghasilkan kelas klien alur kerja berdasarkan antarmuka, seperti yang dibahas nanti.

@Workflowmemiliki satu parameter opsional, DataConverter, yang sering digunakan dengan nilai default, NullDataConverter, yang menunjukkan bahwa harus digunakan. JsonDataConverter

@WorkflowRegistrationOptions juga memiliki sejumlah parameter opsional yang dapat digunakan untuk mengkonfigurasi pekerja alur kerja. Di sini, kita mengatur defaultExecutionStartToCloseTimeoutSeconds—yang menentukan berapa lama alur kerja dapat menjalankan—hingga 3600 detik (1 jam).

Definisi GreeterWorkflow antarmuka berbeda dari HelloWorld dalam satu cara penting, @Execute anotasi. Antarmuka alur kerja menentukan metode yang dapat disebut oleh aplikasi seperti alur kerja starter dan terbatas pada beberapa metode, masing-masing dengan peran tertentu. Kerangka kerja tidak menentukan nama atau daftar parameter untuk metode antarmuka alur kerja; Anda menggunakan nama dan daftar parameter yang cocok untuk alur kerja Anda dan menerapkan AWS Flow Framework untuk penjelasan Java untuk mengidentifikasi peran metode ini.

@Execute memiliki dua tujuan:

  • Ini mengidentifikasi greet sebagai titik masuk alur kerja—metode yang digunakan starter alur kerja untuk memulai alur kerja. Secara umum, titik masuk dapat mengambil satu atau lebih parameter, yang memungkinkan starter menginisialisasi alur kerja, tetapi contoh ini tidak memerlukan inisialisasi.

  • Ini menentukan nomor versi alur kerja, yang mengizinkan Anda untuk melacak generasi yang berbeda dari implementasi alur kerja. Untuk mengubah antarmuka alur kerja setelah Anda mendaftarkannya dengan Amazon SWF, termasuk mengubah nilai batas waktu, Anda harus menggunakan nomor versi baru.

Untuk informasi tentang metode lainnya yang dapat disertakan dalam antarmuka alur kerja, lihat Alur Kerja dan Kontrak Aktivitas.

HelloWorldWorkflow mengimplementasikan alur kerja diGreeterWorkflowImpl, 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(name); operations.say(greeting); } }

Kode ini mirip dengan HelloWorld, tetapi dengan dua perbedaan penting.

  • GreeterWorkflowImpl menciptakan sebuah instans dari GreeterActivitiesClientImpl, klien aktivitas, bukan GreeterActivitiesImpl, dan mengeksekusi aktivitas dengan memanggil metode pada objek klien.

  • Nama dan ucapan aktivitas mengembalikan objek Promise<String> daripada objek String.

HelloWorld adalah aplikasi Java standar yang berjalan secara lokal sebagai satu proses, sehingga GreeterWorkflowImpl dapat mengimplementasikan topologi alur kerja hanya dengan membuat instanceGreeterActivitiesImpl, memanggil metode secara berurutan, dan meneruskan nilai pengembalian dari satu aktivitas ke aktivitas berikutnya. Dengan alur kerja Amazon SWF, tugas aktivitas masih dilakukan dengan metode aktivitas dari GreeterActivitiesImpl. Namun, metode ini tidak selalu berjalan dalam proses yang sama seperti alur kerja—bahkan mungkin tidak berjalan pada sistem yang sama—dan alur kerja perlu menjalankan aktivitas asinkron. Persyaratan ini meningkatkan masalah berikut:

  • Bagaimana menjalankan metode aktivitas yang mungkin berjalan dalam proses yang berbeda, mungkin pada sistem yang berbeda.

  • Bagaimana menjalankan metode aktivitas secara asinkron.

  • Bagaimana mengelola nilai-nilai masukan dan mengembalikan aktivitas. Misalnya, jika nilai mengembalikan Aktivitas A adalah masukan untuk Aktivitas B, Anda harus memastikan bahwa Aktivitas B tidak mengeksekusi sampai Aktivitas A selesai.

Anda dapat menerapkan berbagai topologi alur kerja melalui aliran kontrol aplikasi dengan menggunakan familiar kontrol aliran Java dikombinasikan dengan aktivitas klien dan Promise<T>.

Aktivitas Klien

GreeterActivitiesClientImpl pada dasarnya adalah proksi untuk GreeterActivitiesImpl yang mengizinkan penerapan alur kerja untuk menjalankan metode GreeterActivitiesImpl asinkron.

Kelas GreeterActivitiesClient dan GreeterActivitiesClientImpl dibuat secara otomatis untuk Anda menggunakan informasi yang diberikan dalam anotasi yang diterapkan ke GreeterActivities kelas Anda. Anda tidak perlu menerapkan ini sendiri.

catatan

Eclipse menghasilkan kelas-kelas ini ketika Anda menyimpan proyek Anda. Anda dapat melihat kode yang dihasilkan di subdirektori .apt_generated dari direktori proyek Anda.

Untuk menghindari kesalahan kompilasi di kelas GreeterWorkflowImpl Anda, itu adalah praktik yang baik untuk memindahkan direktori .apt_generated ke atas tab Order and Export (Pesan dan Ekspor) dari kotak dialog Java Build Path (Jalur Membangun Java).

Seorang pekerja alur kerja mengeksekusi aktivitas dengan memanggil metode klien yang sesuai. Metode asinkron dan segera mengembalikan objek Promise<T>, tempat T adalah jenis kembali aktivitas. Objek Promise<T> kembali pada dasarnya adalah sebuah tempat untuk nilai bahwa metode aktivitas akhirnya akan kembali.

  • Ketika metode klien kegiatan kembali, objek Promise<T> awalnya dalam sebuah kondisi tidak siap, yang menunjukkan bahwa objek belum mewakili nilai kembali valid.

  • Ketika metode aktivitas yang sesuai menyelesaikan tugas dan kembali, kerangka kerja memberikan nilai kembali ke objek Promise<T> dan menempatkan dalam status siap.

<T>Jenis Janji

Tujuan utama dari objek Promise<T> adalah untuk mengelola aliran data antara komponen asinkron dan mengontrol ketika mereka mengeksekusi. Ini mengurangi aplikasi Anda dari kebutuhan untuk secara eksplisit mengelola sinkronisasi atau bergantung pada mekanisme seperti timer untuk memastikan bahwa komponen asinkron tidak menjalankan prematur. Ketika Anda memanggil metode aktivitas klien, segera kembali tetapi menunda kerangka kerja mengeksekusi metode aktivitas yang sesuai sampai masukan objek Promise<T> siap dan mewakili data yang valid.

Dari perspektif GreeterWorkflowImpl, semua tiga aktivitas metode klien kembali segera. Dari perspektif GreeterActivitiesImpl, kerangka kerja tidak memanggil getGreeting sampai name selesai, dan tidak memanggil say sampai getGreeting selesai.

Dengan menggunakan Promise<T> untuk melewatkan data dari satu aktivitas ke kegiatan berikutnya, HelloWorldWorkflow tidak hanya memastikan bahwa metode aktivitas tidak mencoba untuk menggunakan data yang tidak valid, itu juga mengontrol ketika kegiatan mengeksekusi dan secara implisit mendefinisikan topologi alur kerja. Melewati setiap Promise<T> aktivitas nilai kembali ke aktivitas berikutnya membutuhkan aktivitas untuk mengeksekusi secara berurutan, mendefinisikan topologi linear dibahas sebelumnya. Dengan AWS Flow Framework untuk Java, Anda tidak perlu menggunakan kode pemodelan khusus untuk mendefinisikan topologi yang kompleks, hanya kontrol aliran Java standar dan. Promise<T> Untuk contoh bagaimana menerapkan topologi paralel sederhana, lihat HelloWorldWorkflowParallel Pekerja Aktivitas.

catatan

Ketika metode aktivitas seperti say tidak mengembalikan nilai, metode klien yang sesuai mengembalikan objek Promise<Void>. Objek tidak mewakili data, tetapi awalnya tidak siap dan menjadi siap ketika aktivitas selesai. Oleh karena itu Anda dapat melewati objek Promise<Void> ke aktivitas lain metode klien untuk memastikan bahwa mereka menunda eksekusi sampai aktivitas asli selesai.

Promise<T> mengizinkan implementasi alur kerja untuk menggunakan metode klien aktivitas dan nilai-nilai kembali mereka seperti metode sinkron. Namun, Anda harus berhati-hati dalam mengakses Promise<T> nilai objek. Berbeda dengan jenis Java Future <T>, kerangka kerja menangani sinkronisasi untuk Promise<T>, bukan aplikasi. Jika Anda memanggil Promise<T>.get dan objeknya belum siap, get melempar pengecualian. Perhatikan bahwa HelloWorldWorkflow tidak pernah mengakses objek Promise<T> secara langsung; itu hanya melewati objek dari satu aktivitas ke aktivitas berikutnya. Ketika sebuah objek menjadi siap, kerangka kerja ekstrak nilai dan lolos ke metode aktivitas sebagai tipe standar.

objek Promise<T> harus diakses hanya dengan kode asinkron, di mana kerangka kerja menjamin bahwa objek siap dan mewakili nilai yang valid. HelloWorldWorkflow berkaitan dengan masalah ini dengan melewati objek Promise<T> untuk metode aktivitas klien. Anda dapat mengakses Promise<T> nilai objek dalam implementasi alur kerja Anda dengan melewatkan objek ke asynchronous workflow method (metode alur kerja asinkron), yang berperilaku seperti aktivitas. Sebagai contoh, lihat Aplikasi HelloWorldWorkflowAsync.

HelloWorldWorkflow Alur Kerja dan Implementasi Aktivitas

Alur kerja dan implementasi aktivitas memiliki kelas pekerja terkait, ActivityWorkerdan. WorkflowWorker Mereka menangani komunikasi antara Amazon SWF dan aktivitas dan implementasi alur kerja dengan polling daftar tugas Amazon SWF yang sesuai untuk tugas, mengeksekusi metode yang tepat untuk setiap tugas, dan mengelola aliran data. Untuk detail selengkapnya, lihat Konsep Dasar AWS Flow Framework: Struktur Aplikasi

Untuk mengaitkan implementasi aktivitas dan alur kerja dengan objek pekerja yang sesuai, Anda menerapkan satu atau lebih aplikasi pekerja yang:

  • Mendaftar alur kerja atau aktivitas dengan Amazon SWF.

  • Membuat objek pekerja dan mengasosiasikan mereka dengan alur kerja atau aktivitas implementasi pekerja.

  • Mengarahkan objek pekerja untuk mulai berkomunikasi dengan Amazon SWF.

Jika Anda ingin menjalankan alur kerja dan aktivitas sebagai proses terpisah, Anda harus menerapkan alur kerja dan aktivitas yang terpisah host pekerja. Sebagai contoh, lihat Aplikasi HelloWorldWorkflowDistributed. Untuk mempermudah, HelloWorldWorkflow mengimplementasikan host pekerja tunggal yang menjalankan aktivitas dan alur kerja pekerja dalam proses yang sama, 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; import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker; public class GreeterWorker { 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 = "helloWorldWalkthrough"; String taskListToPoll = "HelloWorldList"; ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll); aw.addActivitiesImplementation(new GreeterActivitiesImpl()); aw.start(); WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll); wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class); wfw.start(); } }

GreeterWorkertidak memiliki HelloWorld mitra, jadi Anda harus menambahkan kelas Java bernama GreeterWorker ke proyek dan menyalin kode contoh ke file itu.

Langkah pertama adalah membuat dan mengonfigurasi AmazonSimpleWorkflowClientobjek, yang memanggil metode layanan Amazon SWF yang mendasarinya. Untuk melakukannya, GreeterWorker:

  1. Membuat ClientConfigurationobjek dan menentukan batas waktu soket 70 detik. Nilai ini menentukan lama untuk menunggu data yang akan ditransfer melalui koneksi terbuka didirikan sebelum menutup soket.

  2. Membuat AWSCredentials objek Basic untuk mengidentifikasi AWS akun dan meneruskan kunci akun ke konstruktor. Untuk kenyamanan, dan untuk menghindari mengekspos mereka sebagai teks biasa dalam kode, kunci disimpan sebagai variabel lingkungan.

  3. Menciptakan AmazonSimpleWorkflowClientobjek untuk mewakili alur kerja, dan meneruskan ClientConfiguration objek BasicAWSCredentials dan ke konstruktor.

  4. Menetapkan URL titik akhir layanan objek klien. Amazon SWF saat ini tersedia di semua AWS wilayah.

Untuk kenyamanan, GreeterWorker mendefinisikan dua konstanta string.

  • domainadalah nama domain Amazon SWF alur kerja, yang Anda buat saat menyiapkan akun Amazon SWF Anda. HelloWorldWorkflowmengasumsikan bahwa Anda menjalankan alur kerja di domain helloWorldWalkthrough "”.

  • taskListToPoll adalah nama daftar tugas yang digunakan Amazon SWF untuk mengelola komunikasi antara alur kerja dan aktivitas pekerja. Anda dapat mengatur nama ke string yang nyaman. HelloWorldWorkflow menggunakan "HelloWorldList" untuk alur kerja dan daftar tugas aktivitas. Di belakang layar, nama-nama berakhir di namespace yang berbeda, sehingga dua daftar tugas yang berbeda.

GreeterWorkermenggunakan konstanta string dan AmazonSimpleWorkflowClientobjek untuk membuat objek pekerja, yang mengelola interaksi antara aktivitas dan implementasi pekerja dan Amazon SWF. Khususnya, objek pekerja menangani tugas mengundi daftar tugas yang sesuai untuk tugas.

objek GreeterWorker membuat ActivityWorker dan mengkonfigurasinya untuk menangani GreeterActivitiesImpl dengan menambahkan instans kelas baru. GreeterWorker kemudian memanggil objek ActivityWorker metode start, yang mengarahkan objek untuk memulai mengundi daftar tugas aktivitas tertentu.

Objek GreeterWorker membuat WorkflowWorker dan mengkonfigurasinya untuk menangani GreeterWorkflowImpl dengan menambahkan nama file kelas, GreeterWorkflowImpl.class. Kemudian memanggil WorkflowWorker metode start objek, yang mengarahkan objek untuk memulai polling daftar tugas alur kerja yang ditentukan.

Anda dapat menjalankan GreeterWorker dengan berhasil pada saat ini. Ini register alur kerja dan aktivitas dengan Amazon SWF dan mulai objek pekerja polling daftar tugas masing-masing. Untuk memverifikasi ini, jalankan GreeterWorker dan pergi ke konsol Amazon SWF dan pilih helloWorldWalkthrough dari daftar domain. Jika Anda memilih Workflow Types (Jenis Alur Kerja) di panel Navigation (Navigasi), Anda akan melihat GreeterWorkflow.greet:

HelloWorldWorkflow jenis alur kerja

Jika Anda memilih Activity Types (Tipe Aktivitas), metode GreeterActivities ditampilkan:

HelloWorldWorkflow jenis kegiatan

Namun, jika Anda memilih Workflow Executions (Eksekusi Alur kerja), Anda tidak akan melihat eksekusi aktif. Meskipun alur kerja dan aktivitas pekerja membuat polling untuk tugas, kami belum memulai eksekusi alur kerja.

HelloWorldWorkflow Pemula

Bagian akhir dari teka-teki ini adalah untuk menerapkan starter alur kerja, merupakan aplikasi yang memulai eksekusi alur kerja. Status eksekusi disimpan oleh Amazon SWF, sehingga Anda dapat melihat riwayat dan status eksekusi. HelloWorldWorkflow mengimplementasikan alur kerja starter dengan memodifikasi GreeterMain kelas, 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; public class GreeterMain { 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 = "helloWorldWalkthrough"; GreeterWorkflowClientExternalFactory factory = new GreeterWorkflowClientExternalFactoryImpl(service, domain); GreeterWorkflowClientExternal greeter = factory.getClient("someID"); greeter.greet(); } }

Objek GreeterMain membuat AmazonSimpleWorkflowClient dengan menggunakan kode yang sama seperti GreeterWorker. Objek kemudian menciptakan objek GreeterWorkflowClientExternal, yang bertindak sebagai proksi untuk alur kerja dalam banyak cara yang sama bahwa klien kegiatan dibuat di GreeterWorkflowClientImpl bertindak sebagai proksi untuk metode aktivitas. Daripada membuat objek klien alur kerja dengan menggunakan new, Anda harus:

  1. Membuat objek pabrik klien eksternal dan meneruskan objek AmazonSimpleWorkflowClient dan Amazon SWF nama domain untuk konstruktor. Objek pabrik klien dibuat oleh prosesor anotasi kerangka kerja, yang menciptakan nama objek hanya dengan menambahkan "ClientExternalFactoryImpl" ke nama antarmuka alur kerja.

  2. Buat objek klien eksternal dengan memanggil getClient metode objek pabrik, yang menciptakan nama objek dengan menambahkan "ClientExternal" ke nama antarmuka alur kerja. Anda dapat secara opsional meneruskan getClient string yang Amazon SWF akan digunakan untuk mengidentifikasi instans ini dari alur kerja. Jika tidak, Amazon SWF merupakan instans alur kerja dengan menggunakan GUID yang dihasilkan.

Klien kembali dari pabrik hanya akan membuat alur kerja yang diberi nama dengan string yang diteruskan ke metode getClient, (klien yang dikembali dari pabrik sudah memiliki status di Amazon SWF). Untuk menjalankan alur kerja dengan id yang berbeda, Anda perlu kembali ke pabrik dan membuat klien baru dengan id yang berbeda telah ditentukan.

Alur kerja klien mengekspos metode greet yang GreeterMain memanggil untuk memulai alur kerja, sebagai greet() adalah metode yang ditentukan dengan anotasi @Execute.

catatan

Prosesor anotasi juga menciptakan objek pabrik klien internal yang digunakan untuk membuat alur kerja anak. Untuk detail selengkapnya, lihat Eksekusi Alur Kerja Anak.

Matikan GreeterWorker untuk saat ini jika masih berjalan, dan jalankan GreeterMain. Anda sekarang harus melihat someID pada daftar Amazon SWF konsol eksekusi alur kerja aktif:.

HelloWorldWorkflow eksekusi alur kerja

Jika Anda memilih someID dan pilih tab Events (Peristiwa), peristiwa ditampilkan:

HelloWorldWorkflow peristiwa alur kerja awal
catatan

Jika Anda memulai GreeterWorker sebelumnya, dan masih berjalan, Anda akan melihat daftar acara yang lebih panjang untuk alasan yang akan dibahas segera. Berhenti GreeterWorker dan coba jalankan GreaterMain lagi.

Tab Events (Peristiwa) hanya menampilkan dua acara:

  • WorkflowExecutionStarted menunjukkan bahwa alur kerja telah mulai mengeksekusi.

  • DecisionTaskScheduled menunjukkan bahwa Amazon SWF telah antri tugas keputusan pertama.

Alasan bahwa alur kerja diblokir pada tugas keputusan pertama adalah bahwa alur kerja didistribusikan di dua aplikasi, GreeterMain dan GreeterWorker. GreeterMain memulai eksekusi alur kerja, namun GreeterWorker tidak berjalan, sehingga pekerja tidak melakukan polling daftar dan melaksanakan tugas. Anda dapat menjalankan aplikasi baik secara independen, tetapi Anda perlu keduanya untuk eksekusi alur kerja untuk melanjutkan di luar tugas keputusan pertama. Jika Anda sekarang menjalankan GreeterWorker, alur kerja dan aktivitas pekerja akan mulai melakukan polling dan berbagai tugas akan selesai dengan cepat. Jika Anda sekarang memeriksa tab Events, batch pertama peristiwa ditampilkan.

HelloWorldWorkflow acara alur kerja lengkap

Anda dapat memilih acara individual untuk mendapatkan informasi lebih lanjut. Pada saat Anda selesai mencari, alur kerja seharusnya mencetak “Hello World!” ke konsol Anda.

Setelah alur kerja selesai, alur kerja tidak lagi muncul di daftar eksekusi aktif. Namun, jika Anda ingin memeriksanya, pilih tombol status eksekusi Closed (Ditutup) dan kemudian pilih List Executions (Daftar Eksekusi). Ini akan menampilkan semua instans alur kerja yang telah selesai di domain yang ditentukan (helloWorldWalkthrough) yang belum melebihi waktu penyimpanan mereka, yang Anda tentukan saat membuat domain.

HelloWorldWorkflow alur kerja yang lengkap

Perhatikan bahwa setiap instans alur kerja memiliki nilai Run ID (Jalankan ID). Anda dapat menggunakan ID Eksekusi yang sama untuk instans alur kerja yang berbeda, tetapi hanya untuk satu eksekusi aktif pada satu waktu.