Sinyal - Amazon Simple Workflow Service

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

Sinyal

Sinyal memungkinkan Anda memasukkan informasi ke dalam eksekusi alur kerja yang sedang berjalan. Dalam beberapa skenario, Anda mungkin ingin menambahkan informasi ke eksekusi alur kerja yang sedang berjalan untuk memberi tahu bahwa ada sesuatu yang berubah atau untuk menginformasikan kejadian eksternal. Setiap proses dapat mengirim sinyal ke eksekusi alur kerja terbuka. Misalnya, satu eksekusi alur kerja mungkin menandakan yang lain.

catatan

Upaya untuk mengirim sinyal ke eksekusi alur kerja yang tidak terbuka mengakibatkan SignalWorkflowExecution gagal dengan UnknownResourceFault.

Untuk menggunakan sinyal, tentukan nama sinyal dan data yang akan diteruskan ke sinyal—jika ada. Kemudian, programkan pengambil keputusan untuk mengenali kejadian sinyal (WorkflowExecutionSignaled) dalam riwayat dan memprosesnya dengan tepat. Saat sebuah proses ingin memberi sinyal eksekusi alur kerja, dapat membuat panggilan ke Amazon SWF (menggunakan SignalWorkflowExecutiontindakan atau, dalam kasus pengambil keputusan, menggunakan SignalExternalWorkflowExecutionkeputusan) yang menetapkan pengidentifikasi untuk eksekusi alur kerja target, nama sinyal, dan data sinyal. Amazon SWF kemudian menerima sinyal, mencatatnya dalam riwayat eksekusi alur kerja target, dan menjadwalkan tugas keputusan untuknya. Saat pengambil keputusan menerima tugas keputusan, juga menerima sinyal di dalam riwayat eksekusi alur kerja. Pengambil keputusan kemudian dapat mengambil tindakan yang tepat berdasarkan sinyal dan datanya.

Terkadang Anda mungkin ingin menunggu sinyal. Misalnya, pengguna dapat membatalkan pesanan dengan mengirimkan sinyal, tetapi hanya dalam waktu satu jam setelah melakukan pemesanan. Amazon SWF tidak memiliki primitif untuk memungkinkan pengambil keputusan menunggu sinyal dari layanan. Fungsionalitas jeda perlu diimplementasikan di dalam pengambil keputusan itu sendiri. Untuk menjeda, pengambil keputusan harus memulai pengatur waktu, menggunakan keputusan StartTimer, yang menentukan durasi pengambil keputusan akan menunggu sinyal sambil melanjutkan proses pemiilihan untuk tugas keputusan. Ketika menerima tugas keputusan, pengambil keputusan harus memeriksa riwayat untuk melihat apakah sinyal telah diterima atau pengatur waktu telah diaktifkan. Jika sinyal telah diterima, maka pengambil keputusan harus membatalkan pengatur waktu. Namun, jika sebaliknya, pengatur waktu telah menyala, maka sinyal tidak tiba dalam waktu yang ditentukan. Untuk meringkas, dalam menunggu sinyal tertentu, lakukan hal berikut.

  1. Buat pengatur waktu untuk jumlah waktu yang harus ditunggu oleh pengambil keputusan.

  2. Ketika tugas keputusan diterima, periksa riwayat untuk melihat apakah sinyal telah tiba atau apakah pengatur waktu telah diaktifkan.

  3. Jika sinyal telah tiba, batalkan pengatur waktu menggunakan keputusan CancelTimer dan proses sinyal. Bergantung pada waktunya, riwayat mungkin berisi kejadian TimerFired dan WorkflowExecutionSignaled. Dalam kasus seperti itu, Anda dapat mengandalkan urutan relatif kejadian dalam riwayat untuk menentukan mana yang terjadi lebih dulu.

  4. Jika pengatur waktu telah menyala, sebelum sinyal diterima, maka pengambil keputusan telah kehabisan waktu untuk menunggu sinyal. Anda dapat gagal dalam eksekusi atau melakukan logika lain apa pun yang sesuai dengan kasus penggunaan Anda.

Untuk kasus di mana alur kerja harus dibatalkan—misalnya, pesanan itu sendiri dibatalkan oleh pelanggan—tindakan RequestCancelWorkflowExecution harus digunakan daripada mengirim sinyal ke alur kerja.

Beberapa aplikasi untuk sinyal antara lain sebagai berikut:

  • Menjeda eksekusi alur kerja dari kemajuan hingga sinyal diterima (misalnya, menunggu pengiriman inventaris).

  • Memberikan informasi ke eksekusi alur kerja yang mungkin memengaruhi logika bagaimana pengambil keputusan membuat keputusan. Hal ini berguna untuk alur kerja yang dipengaruhi oleh kejadian eksternal (misalnya, mencoba menyelesaikan penjualan saham setelah pasar tutup).

  • Memperbarui eksekusi alur kerja saat Anda mengantisipasi bahwa perubahan mungkin terjadi (misalnya, mengubah jumlah pesanan setelah pesanan dilakukan dan sebelum dikirim).

Dalam contoh berikut, eksekusi alur kerja dikirimi sinyal untuk membatalkan pesanan.

https://swf.us-east-1.amazonaws.com SignalWorkflowExecution {"domain": "867530901", "workflowId": "20110927-T-1", "runId": "f5ebbac6-941c-4342-ad69-dfd2f8be6689", "signalName": "CancelOrder", "input": "order 3553"}

Jika eksekusi alur kerja menerima sinyal, Amazon SWF mengembalikan respons HTTP yang berhasil serupa dengan berikut ini. Amazon SWF akan menghasilkan tugas keputusan untuk memberi tahu pengambil keputusan untuk memproses sinyal.

HTTP/1.1 200 OK Content-Length: 0 Content-Type: application/json x-amzn-RequestId: bf78ae15-3f0c-11e1-9914-a356b6ea8bdf