Saga dan Alur Kerja
Koordinasikan proses yang berjalan lama.
Saga dan Alur Kerja adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Mengoordinasikan Alur Kerja Panjang
Beberapa proses bisnis mencakup banyak pesan dan langkah dalam jangka waktu tertentu: membuat pesanan, menagih pembayaran, mencadangkan stok, dan mengirimkan barang. saga mengoordinasikan alur kerja yang berjalan lama tersebut dan melacak statusnya di antara pesan.
Apa Itu Saga?
saga adalah konsumen yang memiliki status. Saga menghubungkan pesan-pesan terkait, menyimpan status alur kerja saat ini, dan bereaksi terhadap peristiwa dengan berpindah antarstatus hingga proses selesai.
Saga Mesin Status
MassTransit memodelkan saga sebagai mesin status menggunakan MassTransitStateMachine. Anda mendeklarasikan status, peristiwa, dan transisi secara deklaratif.
dotnet add package MassTransit
// state machine sagas are built inStatus Saga
Status tersebut adalah kelas yang mengimplementasikan SagaStateMachineInstance. Status ini membawa CorrelationId serta data apa pun yang perlu Anda ingat di antara langkah-langkah.
public class OrderState : SagaStateMachineInstance
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
public decimal Amount { get; set; }
}Mendeklarasikan Status dan Peristiwa
Di dalam mesin status, Anda mendeklarasikan properti State dan properti Event yang dipetakan ke jenis pesan.
public class OrderSaga : MassTransitStateMachine<OrderState>
{
public State AwaitingPayment { get; private set; }
public State Completed { get; private set; }
public Event<OrderPlaced> OrderPlaced { get; private set; }
public Event<PaymentReceived> PaymentReceived { get; private set; }
}Korelasi
Setiap peristiwa harus dikorelasikan dengan instans saga yang tepat, biasanya menggunakan ID bersama seperti OrderId. Dengan demikian, pesan masuk diarahkan ke alur kerja yang sedang berjalan dan benar.
Event(() => PaymentReceived, e =>
e.CorrelateById(m => m.Message.OrderId));Mendefinisikan Transisi
Konstruktor menghubungkan perilaku: peristiwa awal membuat instans, menyimpan data, lalu berpindah ke status berikutnya.
Initially(
When(OrderPlaced)
.Then(ctx => ctx.Saga.Amount = ctx.Message.Amount)
.TransitionTo(AwaitingPayment));Bereaksi dalam Suatu Status
Gunakan During untuk menangani peristiwa yang hanya valid dalam status tertentu, lalu terbitkan pesan lanjutan dan lanjutkan ke status berikutnya.
During(AwaitingPayment,
When(PaymentReceived)
.Publish(ctx => new OrderConfirmed(ctx.Saga.CorrelationId))
.TransitionTo(Completed)
.Finalize());Menyimpan Status Saga
Status saga harus tetap ada setelah aplikasi dimulai ulang, sehingga disimpan dalam repositori: Entity Framework, MongoDB, Redis, atau yang lainnya. MassTransit memuat dan menyimpan instans di sekitar setiap pesan.
x.AddSagaStateMachine<OrderSaga, OrderState>()
.EntityFrameworkRepository(r =>
{
r.ExistingDbContext<OrderDbContext>();
});Batas Waktu dengan Jadwal
Saga dapat menjadwalkan batas waktu (misalnya, membatalkan jika pembayaran tidak diterima dalam 30 menit) menggunakan Schedule, lalu menangani peristiwa batas waktu tersebut untuk melakukan kompensasi.
Kompensasi
Jika langkah berikutnya gagal, saga dapat menjalankan tindakan kompensasi untuk membatalkan tindakan sebelumnya (mengembalikan biaya, melepaskan stok), sehingga keseluruhan proses tetap konsisten tanpa transaksi terdistribusi.
Pemeriksaan Singkat
Uji saga dan alur kerja.
Ringkasan
saga mengoordinasikan alur kerja yang berjalan lama sebagai konsumen berkondisi dan berkorelasi. MassTransit menggunakan MassTransitStateMachine dengan status SagaStateMachineInstance, anggota State/Event yang dideklarasikan, korelasi berdasarkan ID, serta transisi melalui Initially/During. Status disimpan dalam repositori, batas waktu menggunakan jadwal, dan kompensasi membatalkan langkah-langkah sebelumnya saat terjadi kegagalan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Saga dan Alur Kerja” gratis?
Ya — teks lengkap “Saga dan Alur Kerja” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Saga dan Alur Kerja”?
Koordinasikan proses yang berjalan lama. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Saga dan Alur Kerja” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Konsep Pesan
- Memproduksi dan Mengonsumsi Pesan
- Saga dan Alur Kerja
- Penanganan Kesalahan dan Percobaan Ulang