Setelah melakukan sedikit riset lebih lanjut, saya menemukan artikel ini dari mana saya menarik beberapa kutipan yang menurut saya bermanfaat untuk apa yang ingin saya capai (dan untuk pembaca masa depan). Ini menawarkan cara untuk mengadopsi model pemrograman reaktif daripada model pemrograman imperatif.
Sumber acara
Idenya di sini adalah untuk mewakili transisi keadaan setiap aplikasi dalam bentuk peristiwa yang tidak berubah. Acara kemudian disimpan dalam bentuk log atau jurnal saat terjadi (juga disebut sebagai 'acara toko'). Mereka juga dapat ditanyakan dan disimpan tanpa batas, bertujuan untuk mewakili bagaimana keadaan aplikasi, secara keseluruhan, berkembang seiring waktu.
Apa yang membantu ini capai adalah bahwa jika suatu layanan mikro turun namun peristiwa lain yang berkaitan dengannya sedang diterbitkan dan peristiwa-peristiwa dikonsumsi oleh, katakanlah, contoh-contoh lain dari layanan mikro itu, ketika layanan mikro itu muncul kembali, itu dapat merujuk pada ini event store
untuk mengambil semua peristiwa yang terjawab selama periode itu turun.
Apache Kafka sebagai Perantara Acara
Pertimbangkan penggunaan Apache Kafka yang dapat menyimpan dan mengirim ribuan acara per detik dan memiliki mekanisme replikasi dan toleransi kesalahan yang terintegrasi. Ini memiliki penyimpanan peristiwa yang dapat disimpan di disk tanpa batas dan dikonsumsi kapan saja (tetapi tidak dihapus) dari Topik (antrian mewah Kafka) dikirim ke.
Peristiwa tersebut kemudian ditetapkan offset yang secara univokal mengidentifikasinya dalam Topik - Kafka dapat mengelola offset itu sendiri, dengan mudah menyediakan semantik pengiriman "paling banyak sekali" atau "setidaknya satu kali", tetapi mereka juga dapat dinegosiasikan ketika konsumen acara bergabung dengan suatu Topik. , memungkinkan layanan microser untuk mulai mengkonsumsi acara dari tempat yang sewenang-wenang dalam waktu - biasanya dari tempat konsumen berhenti. Jika offset peristiwa yang dikonsumsi terakhir secara transaksi tetap ada di penyimpanan lokal layanan ketika usecases 'berhasil menyelesaikan', offset itu dapat dengan mudah digunakan untuk mencapai semantik pengiriman acara “tepat sekali”.
Bahkan, ketika konsumen mengidentifikasi diri mereka ke Kafka, Kafka akan merekam pesan mana yang dikirimkan ke konsumen mana sehingga tidak melayani lagi.
Sagas
Untuk usecase yang lebih kompleks di mana komunikasi antara layanan yang berbeda memang diperlukan, tanggung jawab untuk menyelesaikan usecase harus dikenali dengan baik - usecase didesentralisasi dan hanya selesai ketika semua layanan yang terlibat mengakui tugas mereka berhasil diselesaikan, jika tidak seluruh usecase harus gagal dan tindakan korektif harus dipicu untuk mengembalikan negara lokal yang tidak valid.
Saat itulah saga ikut bermain. Saga adalah urutan transaksi lokal. Setiap transaksi lokal memperbarui basis data dan menerbitkan pesan atau peristiwa untuk memicu transaksi lokal berikutnya dalam kisah tersebut. Jika transaksi lokal gagal karena melanggar aturan bisnis maka hikayat tersebut melakukan serangkaian transaksi kompensasi yang membatalkan perubahan yang dilakukan oleh transaksi lokal sebelumnya. Baca ini untuk info lebih lanjut.