Implementasi Aktivitas - 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.

Implementasi Aktivitas

Kegiatan dilaksanakan dengan menyediakan implementasi dari Antarmuka @Activities. AWS Flow Framework untuk Java menggunakan instans implementasi aktivitas yang dikonfigurasi pada pekerja untuk memproses tugas aktivitas pada saat pengoperasian. Pekerja secara otomatis mencari implementasi aktivitas dari jenis yang sesuai.

Anda bisa menggunakan properti dan bidang untuk meneruskan sumber daya ke instans aktivitas, seperti koneksi database. Karena objek implementasi kegiatan dapat diakses dari beberapa thread, sumber daya bersama harus thread-safe.

Perhatikan bahwa implementasi kegiatan tidak mengambil parameter jenis Promise<> atau mengembalikan objek dari jenis itu. Hal ini karena implementasi kegiatan tidak harus bergantung pada bagaimana hal itu dipanggil (serentak atau asinkron).

Antarmuka kegiatan yang ditampilkan sebelumnya dapat diimplementasikan seperti ini:

public class MyActivitiesImpl implements MyActivities { @Override @ManualActivityCompletion public int activity1(){ //implementation } @Override public void activity2(int foo){ //implementation } }

Sebuah thread konteks lokal tersedia untuk implementasi kegiatan yang dapat digunakan untuk mengambil objek tugas, objek konverter data yang digunakan, dll. Konteks saat ini dapat diakses melalui ActivityExecutionContextProvider.getActivityExecutionContext(). Untuk lebih detailnya, lihat bagian dokumentasi AWS SDK for Java untuk ActivityExecutionContext dan bagian Konteks Eksekusi.

Menyelesaikan Aktivitas Secara Manual

Anotasi @ManualActivityCompletion pada contoh di atas adalah anotasi opsional. Hal ini diperbolehkan hanya pada metode yang menerapkan kegiatan dan digunakan untuk mengkonfigurasi aktivitas untuk tidak secara otomatis selesai ketika metode aktivitas kembali. Hal ini dapat berguna ketika Anda ingin menyelesaikan aktivitas asinkron—misalnya, secara manual setelah tindakan manusia telah selesai.

Secara default, kerangka menganggap aktivitas selesai ketika metode aktivitas Anda kembali. Ini berarti pekerja aktivitas melaporkan penyelesaian tugas aktivitas ke Amazon SWF dan memberikan hasilnya (jika ada). Namun, ada kasus penggunaan di mana Anda tidak ingin tugas aktivitas ditandai selesai ketika metode aktivitas kembali. Ini sangat berguna jika Anda memodelkan tugas manusia. Misalnya, metode aktivitas dapat mengirim email ke orang yang harus menyelesaikan beberapa pekerjaan sebelum tugas aktivitas selesai. Dalam kasus seperti itu, Anda dapat memberi anotasi pada metode aktivitas dengan anotasi @ManualActivityCompletion untuk memberi tahu pekerja aktivitas bahwa tidak harus menyelesaikan aktivitas secara otomatis. Untuk menyelesaikan aktivitas secara manual, Anda dapat menggunakan ManualActivityCompletionClient yang disediakan dalam kerangka kerja atau menggunakan metode RespondActivityTaskCompleted pada klien Java Amazon SWF yang disediakan di Amazon SWF SDK. Untuk detail selengkapnya, lihat Dokumentasi AWS SDK for Java.

Dalam rangka untuk menyelesaikan tugas kegiatan, Anda perlu memberikan token tugas. Token tugas digunakan oleh Amazon SWF untuk mengidentifikasi tugas secara unik. Anda dapat mengakses token ini dari ActivityExecutionContext dalam implementasi aktivitas Anda. Anda harus mengirim token ini ke pihak yang bertanggung jawab untuk menyelesaikan tugas. Token ini dapat diambil dari ActivityExecutionContext dengan memanggil ActivityExecutionContextProvider.getActivityExecutionContext().getTaskToken().

Aktivitas getName dari contoh Hello World dapat diimplementasikan untuk mengirim email yang meminta seseorang untuk memberikan pesan ucapan:

@ManualActivityCompletion @Override public String getName() throws InterruptedException { ActivityExecutionContext executionContext = contextProvider.getActivityExecutionContext(); String taskToken = executionContext.getTaskToken(); sendEmail("abc@xyz.com", "Please provide a name for the greeting message and close task with token: " + taskToken); return "This will not be returned to the caller"; }

Potongan kode berikut dapat digunakan untuk memberikan ucapan dan menutup tugas dengan menggunakan ManualActivityCompletionClient. Atau, Anda juga dapat gagal dalam tugas:

public class CompleteActivityTask { public void completeGetNameActivity(String taskToken) { AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(...); // use AWS access keys ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient); ManualActivityCompletionClient manualCompletionClient = manualCompletionClientFactory.getClient(taskToken); String result = "Hello World!"; manualCompletionClient.complete(result); } public void failGetNameActivity(String taskToken, Throwable failure) { AmazonSimpleWorkflow swfClient = new AmazonSimpleWorkflowClient(...); // use AWS access keys ManualActivityCompletionClientFactory manualCompletionClientFactory = new ManualActivityCompletionClientFactoryImpl(swfClient); ManualActivityCompletionClient manualCompletionClient = manualCompletionClientFactory.getClient(taskToken); manualCompletionClient.fail(failure); } }