Transaksi Database
Pengantar
Node transaksi database digunakan untuk menjalankan sekumpulan operasi database dalam transaksi yang sama. Node ini cocok untuk skenario yang membutuhkan beberapa langkah pemrosesan data "semua berhasil atau semua rollback", misalnya membuat pesanan, mengurangi stok, menulis detail, dan memperbarui status.
Node transaksi saat ini hanya mendukung sumber data database. Operasi data dari sumber data yang sama di dalam Node akan otomatis masuk ke transaksi ini; sumber data lain tidak akan menggunakan transaksi ini.
Membuat Node
Pada antarmuka konfigurasi workflow, klik tombol plus ("+") pada alur untuk menambahkan Node "Transaksi Database".

Setelah dibuat, dua cabang akan dihasilkan:
- Jalankan: cabang utama yang dijalankan di dalam transaksi. Jika semua Node dalam cabang ini berhasil, transaksi akan otomatis di-commit. Jika ada Node yang gagal atau error, transaksi akan otomatis di-rollback.
- Setelah rollback: cabang yang dijalankan setelah rollback. Cabang ini berjalan di luar transaksi dan dapat digunakan untuk mencatat log, mengirim notifikasi, atau menjalankan kompensasi.

Konfigurasi Node

Sumber Data
Pilih sumber data database yang dikendalikan oleh transaksi ini. Hanya Node operasi data dari sumber data yang sama yang otomatis masuk ke transaksi.
Level Isolasi
Atur level isolasi transaksi. Nilai default adalah READ UNCOMMITTED. Jika bisnis membutuhkan konsistensi data yang lebih ketat, pilih level isolasi lain sesuai kemampuan database dan kebutuhan konkurensi.
Lanjutkan Workflow Setelah Rollback
Jika diaktifkan, setelah cabang Setelah rollback selesai, workflow akan melanjutkan ke Node setelah Node transaksi.
Jika dinonaktifkan, setelah cabang Setelah rollback selesai, workflow berhenti di Node transaksi dan tidak menjalankan Node berikutnya.
Cara Penggunaan
Batasan
Cabang Jalankan tidak mendukung Node asinkron yang membuat workflow tertunda, seperti pemrosesan manual dan delay. Transaksi harus diselesaikan dengan commit atau rollback dalam eksekusi saat ini. Jika cabang Jalankan masuk ke status menunggu, sistem akan melakukan rollback transaksi dan menandai workflow sebagai gagal.
Cabang Setelah rollback berjalan di luar transaksi, sehingga tidak terkena batasan di atas. Anda dapat menggunakan Node asinkron pada cabang ini sesuai kebutuhan, misalnya mengirim request, menunggu konfirmasi manual, atau melakukan proses tertunda.
Transaksi akan menggunakan koneksi database sampai commit atau rollback selesai. Hindari operasi berdurasi panjang di cabang Jalankan, dan letakkan hanya pembacaan, penulisan, serta pemeriksaan data yang diperlukan.
Transaksi Bertingkat
Node transaksi dapat digunakan secara bertingkat, tetapi perlu memperhatikan cakupan sumber data:
- Jika transaksi dalam dan luar menggunakan sumber data yang sama, transaksi dalam dibuat dalam cakupan transaksi luar dan diproses sesuai kemampuan database dan Sequelize.
- Jika transaksi dalam menggunakan sumber data yang berbeda, transaksi luar tidak digunakan kembali. Sistem akan membuat transaksi independen untuk sumber data tersebut.
- Jika workflow dipicu oleh event tabel data sinkron, trigger itu sendiri mungkin sudah menyediakan transaksi tingkat atas untuk sumber data yang sama. Node transaksi akan memprioritaskan penggunaan transaksi luar dari sumber data yang sama, dan tidak akan menggunakan transaksi dari sumber data berbeda.
Transaksi bertingkat meningkatkan biaya pemahaman dan troubleshooting. Umumnya gunakan transaksi bertingkat hanya saat benar-benar membutuhkan batas rollback lokal. Jika tidak, lebih baik gunakan satu Node transaksi untuk membungkus seluruh proses data.
Skenario Umum
Alur umum adalah sebagai berikut:
- Query atau buat data terkait di cabang
Jalankan. - Lanjutkan memperbarui stok, status, detail, dan data lain dari sumber data yang sama di cabang
Jalankan. - Jika semuanya berhasil, transaksi otomatis di-commit.
- Jika ada Node yang gagal atau error, transaksi otomatis di-rollback dan workflow masuk ke cabang
Setelah rollback. - Di cabang
Setelah rollback, catat alasan kegagalan, kirim notifikasi, atau jalankan logika kompensasi.
Jika perlu melanjutkan alur setelah rollback, aktifkan "Lanjutkan workflow setelah rollback".

