Mengembangkan Pekerja Aktivitas di Amazon SWF - Amazon Simple Workflow Service

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

Mengembangkan Pekerja Aktivitas di Amazon SWF

Pekerja aktivitas menyediakan satu atau lebih implementasi tipe aktivitas. Pekerja aktivitas berkomunikasi dengan Amazon SWF untuk menerima tugas aktivitas dan melaksanakannya. Anda dapat memiliki armada beberapa pekerja aktivitas yang melakukan tugas dari tipe aktivitas yang sama.

Amazon SWF membuat tugas aktivitas yang tersedia untuk pekerja aktivitas ketika decider menjadwal tugas aktivitas. Ketika decider menjadwal tugas aktivitas, ia menyediakan data (yang Anda tentukan) yang dibutuhkan pekerja aktivitas untuk melakukan tugas aktivitas. Amazon SWF memasukkan data ini ke dalam tugas aktivitas sebelum mengirimkannya ke pekerja aktivitas.

Pekerja aktivitas dikelola oleh Anda. Mereka dapat ditulis dalam bahasa apa pun. Pekerja dapat dijalankan di mana saja, selama dapat berkomunikasi dengan Amazon SWF melalui API. Karena Amazon SWF menyediakan semua informasi yang dibutuhkan untuk melakukan tugas aktivitas, semua pekerja aktivitas dapat menjadi stateless. Keadaan stateless mengaktifkan alur kerja Anda menjadi sangat dapat diskalakan; untuk menangani peningkatan kebutuhan kapasitas, cukup tambahkan lebih banyak pekerja aktivitas.

Bagian ini menjelaskan cara mengimplementasi pekerja aktivitas. Para pekerja aktivitas harus berulang kali melakukan hal berikut.

  1. Polling Amazon SWF untuk tugas aktivitas.

  2. Memulai melakukan tugas.

  3. Melaporkan detak jantung ke Amazon SWF secara berkala jika tugas berumur panjang.

  4. Melaporkan bahwa tugas telah selesai atau gagal dan mengembalikan hasil ke Amazon SWF.

Polling untuk Tugas Aktivitas

Untuk melakukan tugas aktivitas, setiap pekerja aktivitas harus melakulan polling Amazon SWF dengan memanggil tindakan PollForActivityTask secara berkala.

Pada contoh berikut, pekerja aktivitas ChargeCreditCardWorker01 melakukan polling untuk tugas pada daftar tugas, ChargeCreditCard-v0.1. Jika tidak ada tugas aktivitas yang tersedia, setelah 60 detik, Amazon SWF mengirimkan kembali respons kosong. Sebuah respons kosong adalah struktur Task di mana nilai taskToken merupakan string kosong.

https://swf.us-east-1.amazonaws.com PollForActivityTask { "domain" : "867530901", "taskList" : { "name": "ChargeCreditCard-v0.1" }, "identity" : "ChargeCreditCardWorker01" }

Jika tugas aktivitas telah tersedia, Amazon SWF mengembalikannya ke pekerja aktivitas. Tugas berisi data yang ditentukan decider saat menjadwalkan aktivitas.

Setelah pekerja aktivitas menerima tugas aktivitas, ia siap untuk melakukan pekerjaan. Bagian berikutnya memberikan informasi tentang melakukan tugas aktivitas.

Melakukan Tugas Aktivitas

Setelah menerima tugas aktivitas, pekerja aktivitas siap untuk melakukannya.

Untuk melakukan tugas aktivitas
  1. Programkan pekerja aktivitas Anda untuk meinterpretasikan konten di bidang input tugas. Bidang ini berisi data yang ditentukan oleh decider ketika tugas dijadwalkan.

  2. Programkan pekerja aktivitas untuk mulai memproses data dan mengeksekusi logika Anda.

Bagian selanjutnya menjelaskan cara memprogram pekerja aktivitas Anda untuk memberikan pembaruan state ke Amazon SWF untuk kegiatan yang berjalan lama.

Pelaporan Detak Jantung Aktivitas Tugas

Jika batas waktu detak jantung terdaftar dengan jenis aktivitas, maka pekerja aktivitas harus mencatat detak jantung sebelum batas waktu detak jantung terlampaui. Jika tugas aktivitas tidak memberikan detak jantung dalam batas waktu, tugas kehabisan waktu, Amazon SWF menutupnya dan menjadwalkan tugas keputusan baru untuk menginformasikan decider dari batas waktu. Decider kemudian dapat menjadwal ulang tugas kegiatan atau mengambil tindakan lain.

Jika, setelah waktu habis, pekerja aktivitas mencoba untuk mengontak Amazon SWF, seperti dengan memanggil RespondActivityTaskCompleted, Amazon SWF akan mengembalikan kesalahan UnknownResource.

Bagian ini menjelaskan cara menyediakan detak jantung aktivitas.

Untuk mencatat detak jantung tugas aktivitas, programkan pekerja aktivitas Anda untuk memanggil tindakan RecordActivityTaskHeartbeat. Tindakan ini juga menyediakan bidang string yang dapat Anda gunakan untuk menyimpan data bentuk bebas untuk mengukur kemajuan dengan cara apa pun yang sesuai untuk aplikasi Anda.

Dalam contoh ini, pekerja aktivitas melaporkan detak jantung ke Amazon SWF dan menggunakan bidang detail untuk melaporkan bahwa tugas aktivitas 40 persen selesai. Untuk melaporkan detak jantung, pekerja aktivitas harus menentukan token tugas aktivitas.

https://swf.us-east-1.amazonaws.com RecordActivityTaskHeartbeat { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "details" : "40" }

Tindakan ini tidak dengan sendirinya membuat kejadian dalam riwayat eksekusi alur kerja; namun, jika waktu tugas habis, riwayat eksekusi alur kerja akan berisi kejadian ActivityTaskTimedOut yang berisi informasi dari detak jantung terakhir yang dihasilkan oleh pekerja aktivitas.

Menyelesaikan atau Kegagalan Tugas Aktivitas

Setelah menjalankan tugas, pekerja aktivitas harus melaporkan apakah tugas kegiatan selesai atau gagal.

Menyelesaikan Tugas Aktivitas

Untuk menyelesaikan tugas aktivitas, programkan pekerja aktivitas untuk memanggil tindakan RespondActivityTaskCompleted setelah berhasil menyelesaikan tugas aktivitas, yang menentukan token tugas.

Dalam contoh ini, pekerja aktivitas menunjukkan bahwa tugas berhasil diselesaikan.

https://swf.us-east-1.amazonaws.com RespondActivityTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "results": "40" }

Ketika aktivitas selesai, Amazon SWF menjadwalkan tugas keputusan baru untuk eksekusi alur kerja yang terkait dengan aktivitas.

Programkan pekerja aktivitas untuk melakukan polling tugas kegiatan lain setelah menyelesaikan tugas yang ada. Hal ini menciptakan putaran di mana pekerja aktivitas terus melakukan polling dan menyelesaikan tugas.

Jika aktivitas tidak merespons dalam periode StartToCloseTimeout, atau jika ScheduleToCloseTimeout telah terlampaui, Amazon SWF membagi waktu tugas aktivitas dan menjadwalkan tugas keputusan. Hal ini memungkinkan decider untuk mengambil tindakan yang tepat, seperti penjadwalan ulang tugas.

Misalnya, jika instans Amazon EC2 mengeksekusi tugas aktivitas dan instans gagal sebelum tugas selesai, decider menerima kejadian batas waktu dalam riwayat eksekusi alur kerja. Jika tugas aktivitas menggunakan detak jantung, decider menerima kejadian ketika tugas gagal dalam memberikan detak jantung berikutnya setelah instans Amazon EC2 gagal. Jika tidak, decider akhirnya menerima kejadian ketika tugas aktivitas gagal untuk menyelesaikan sebelum mencapai salah satu nilai batas waktu keseluruhannya. Kemudian terserah kepada decider untuk menetapkan kembali tugas atau mengambil beberapa tindakan lain.

Kegagalan Tugas Aktivitas

Jika pekerja aktivitas tidak dapat melakukan tugas aktivitas untuk beberapa alasan, tetapi masih dapat berkomunikasi dengan Amazon SWF, Anda dapat memprogramnya untuk mengagalkan tugas.

Untuk memprogram pekerja aktivitas dalam pengagalan tugas aktivitas, programkan pekerja aktivitas untuk memanggil tindakan RespondActivityTaskFailed yang menentukan token tugas.

https://swf.us-east-1.amazonaws.com RespondActivityTaskFailed { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "reason" : "CC-Invalid", "details" : "Credit Card Number Checksum Failed" }

Sebagai developer, Anda menentukan nilai-nilai yang disimpan dalam bidang alasan dan detail. Ini adalah bentuk bebas string; Anda dapat menggunakan konvensi kode kesalahan yang melayani aplikasi Anda. Amazon SWF tidak memproses nilai-nilai ini. Namun, Amazon SWF mungkin menampilkan nilai-nilai ini di konsol tersebut.

Ketika tugas aktivitas gagal, Amazon SWF menjadwal tugas keputusan untuk eksekusi alur kerja dengan tugas aktivitas yang terkait untuk menginformasikan decider kegagalan. Programkan decider Anda untuk menangani aktivitas yang gagal, seperti dengan menjadwal ulang aktivitas atau mengagalkan eksekusi alur kerja, tergantung pada sifat kegagalan.

Peluncuran Pekerja Aktivitas

Untuk meluncurkan pekerja aktivitas, paketkan logika Anda menjadi dapat dieksekusi yang dapat digunakan pada platform pekerja aktivitas Anda. Misalnya, Anda mungkin memaketkan kode aktivitas Anda sebagai dapat dieksekuso Java yang dapat Anda jalankan di server Linux dan Windows.

Setelah diluncurkan, pekerja Anda mulai melakukan polling untuk tugas. Hingga decider menjadwal tugas aktivitas, namun, polling ini kehabisan waktu tanpa tugas dan pekerja Anda hanya terus melakukan polling.

Karena polling merupakan permintaan keluar, pekerja aktivitas dapat berjalan pada jaringan apa pun yang memiliki akses ke endpoint Amazon SWF.

Anda dapat meluncurkan sebanyak mungkin pekerja aktivitas yang Anda inginkan. Sebagai decider jadwal tugas aktivitas, Amazon SWF mendistribusikan tugas aktivitas kepada pekerja aktivitas polling secara otomatis.