Alur Kerja
Startup
- NestJS membuat
WorkerCommonAppModuledan koneksi PostgreSQL, Redis, serta NATS sesuai environment. KvBootstrapServicememanggilsyncAllKvOnStartup().- Jika Redis nonaktif, bootstrap cache dilewati dan startup barrier tetap dibuka.
- Jika Redis aktif, worker mencoba membersihkan semua key
config.*danglobal:config. - Worker membaca konfigurasi tabel published yang masih aktif dan tercatat di
directus_collections. - Untuk setiap konfigurasi, worker menyimpan metadata
kv_cache_table, menjalankan query sumber, menyimpan tiap row, lalu mengganti index tabel. - Setelah seluruh tabel selesai, startup barrier dibuka.
- Komponen realtime membuat subscription, lalu
KvCacheSyncServicemenerbitkan snapshotconfig.sync.initjika Redis dan NATS aktif.
Purge yang gagal hanya menghasilkan warning; bootstrap tetap mencoba mengisi ulang cache.
Perubahan row sumber
Consumer item menggunakan manual explicit ack. Jika pemrosesan gagal, message di-nak selama 10 detik dan dapat dikirim ulang hingga MAX_REDELIVERY = 3.
Perubahan registrasi kv_cache_table
KvCacheTableServicemenerima eventpgcdc.public.kv_cache_table.- Metadata terbaru ditulis ke cache
kv_cache_table. - Untuk create/update aktif, worker melakukan full sync tabel terkait.
- Untuk update yang memiliki
date_deleted, worker menghapus seluruh cache tabel. - Daftar subscription tabel dihitung ulang dari cache
kv_cache_table. - Subscription baru dibuat; subscription yang tidak lagi terdaftar dihentikan dan durable consumer-nya dihapus.
- Message di-ack.
Pada catch path consumer metadata, error dicatat lalu message tetap di-ack sehingga tidak ada retry dari consumer ini.
Full sync satu tabel
- Ambil metadata
query_sourcedancache_name. - Jalankan query penuh.
- Upsert semua row yang memiliki
id. - Bandingkan ID lama dengan hasil baru dan hapus orphan.
- Ganti Redis set
config.<cache>.indexsecara authoritative. - Publish event
type: 'table'keconfig.sync.changed.
Shutdown
Ketiga service realtime memanggil drain pada koneksi NATS saat module dihentikan. KvCacheTableItemService juga menghentikan subscription tabel lokal terlebih dahulu.